spring進步 — log4j的學習

賈達拉特里夫發表於2017-09-09

一直感覺到log4j是使用比較混亂,今天抽空整理一下,以後方便使用

一、引用apache.log4j
使用maven進行lo4j的引用

<!-- Apache Log4j 1.2.17 -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

其他版本也可以再資源庫搜尋新增
http://mvnrepository.com/arti…

二、再spring的bean中或者java類中加入log4j

/**
* lo4j引用demo
*/
@Controller
@RequestMapping("demoWeb")
public class DemoWebController {
    //使用方法1 -- 用this直接代表本類
    private final Logger logger = Logger.getLogger(this.getClass());
    //使用方法2 -- 使用用本類引用
    private final Logger logger = Logger.getLogger(DemoWebController.getClass());
}

三、配置log4j配置檔案(引用的lo4j百度百科)
1、在配置resources或自定義路徑下配置log4j.properties(命名自定義,只要spring能檢索到就可以)
2、說明:
① 配置根Logger

Logger 負責處理日誌記錄的大部分操作。
其語法為:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日誌記錄的優先順序,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定義的級別。
Log4j建議只使用四個級別,優先順序從高到低分別是ERROR、WARN、INFO、DEBUG。
通過在這裡定義的級別,您可以控制到應用程式中相應級別的日誌資訊的開關。比如在這裡定義了INFO級別,只有等於及高於這個級別的才進行處理,則應用程式中所有DEBUG級別的日誌資訊將不被列印出來。
ALL:列印所有的日誌,OFF:關閉所有的日誌輸出。 
appenderName就是指定日誌資訊輸出到哪個地方。可同時指定多個輸出目的地。
示例:
log4j.rootLogger=info, stdout

② 配置日誌資訊輸 Appender

##這裡填寫你輸出的方式
og4j.appender.appenderName = {appender}

Log4j提供的appender有以下幾種:

  • org.apache.log4j.ConsoleAppender(控制檯)
  • org.apache.log4j.FileAppender(檔案)
  • org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案)
  • org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案)
  • org.apache.log4j.WriterAppender(將日誌資訊以流格式傳送到任意指定的地方)
  • org.apache.log4j.jdbc.JDBCAppender(向資料庫傳送日誌)
  • org.apache.log4j.net.SMTPAppender(郵件傳送日誌)

示例:

##這裡表示控制檯的資訊記錄
og4j.appender.appenderName = org.apache.log4j.ConsoleAppender

## 下面是appender的基本options

##系統輸出方式
log4j.appender.appenderName.Target = System.out
##生成檔案路勁
log4j.appender.appenderName.File = E:\file\log\qc.log
##追加方式 true為在資訊後面追加  false為覆蓋資訊後輸出
log4j.appender.appenderName.Append = true
##指定輸出等級
log4j.appender.appenderName.Threshold = INFO 
##佈局輸出
log4j.appender.appenderName.layout = org.apache.log4j.PatternLayout

③置日誌資訊的格式(佈局)

##這裡填寫你輸出的方式
og4j.appender.appenderName.layout  = {style}

Log4j提供的style有以下幾種:

  • org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
  • org.apache.log4j.PatternLayout(可以靈活地指定佈局模式),
  • org.apache.log4j.SimpleLayout(包含日誌資訊的級別和資訊字串),
  • org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等等資訊)

如果使用pattern佈局就要指定的列印資訊的具體格式ConversionPattern,列印引數如下:

  • %m 輸出程式碼中指定的訊息;
  • %M 輸出列印該條日誌的方法名;
  • %p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL;
  • %r 輸出自應用啟動到輸出該log資訊耗費的毫秒數;
  • %c 輸出所屬的類目,通常就是所在類的全名;
  • %t 輸出產生該日誌事件的執行緒名;
  • %n 輸出一個回車換行符,Windows平臺為”rn”,Unix平臺為”n”;
  • %d 輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},輸出類似:2002-10-18 22:10:28,921;
  • %l 輸出日誌事件的發生位置,及在程式碼中的行數;
  • [QC]是log資訊的開頭,可以為任意字元,一般為專案簡稱。
    示例
##這裡進行輸出格式配置
log4j.appender.appenderName.layout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n

輸出的資訊
[demo] DEBUG [main] DemoBeanFactory.getDemo(189) | this is output log

以上就完成了基本的log4j的配置和使用


下面進行一般示例配置:

### 設定日誌等級  ###
log4j.rootLogger=DEBUG,CONSOLE,DATABASE,DAIY_LOG,DAIY_INFO_LOG,DAIY_ERROR_LOG

### CONSOLE 控制檯輸出 ###
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[spring-demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

### 將錯誤日誌存到DATABASE中 ###
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
##資料庫地址
log4j.appender.DATABASE.URL=jdbc:mysql://127.0.0.1:3306/demo
##資料庫橋
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
##mysql使用者名稱
log4j.appender.DATABASE.user=root
##mysql密碼
log4j.appender.DATABASE.password=root
##講console中的警告日誌書寫的到資料庫中
log4j.appender.CONSOLE.Threshold=WARN
# INSERT INTO LOG4J (Message) VALUES (`[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n`)
log4j.appender.DATABASE.sql=INSERT INTO LOG4J(stamp,thread, infolevel,class,messages) VALUES (`%d{yyyy-MM-dd HH:mm:ss}`, `%t`, `%p`, `%l`, `%m`)
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[spring-demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

### DAIYLOG 每日資訊 ###
log4j.appender.DAIY_LOG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DAIY_LOG.File=E:\file\log\demo_all_log.log
log4j.appender.DAIY_LOG.Append=true
log4j.appender.DAIY_LOG.Threshold=ALL 
log4j.appender.DAIY_LOG.layout=org.apache.log4j.PatternLayout
log4j.appender.DAIY_LOG.layout.ConversionPattern=[spring-demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

### DAIYLOG 每日INFO資訊 ###
log4j.appender.DAIY_INFO_LOG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DAIY_INFO_LOG.File=E:\file\log\demo_info_log.log
log4j.appender.DAIY_INFO_LOG.Append=true
log4j.appender.DAIY_INFO_LOG.Threshold=INFO 
log4j.appender.DAIY_INFO_LOG.layout=org.apache.log4j.PatternLayout
log4j.appender.DAIY_INFO_LOG.layout.ConversionPattern=[spring-demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

### DAIYLOG 每日ERROR資訊 ###
log4j.appender.DAIY_ERROR_LOG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DAIY_ERROR_LOG.File=E:\file\log\demo_error_log.log
log4j.appender.DAIY_ERROR_LOG.Append=true
log4j.appender.DAIY_ERROR_LOG.Threshold=ERROR 
log4j.appender.DAIY_ERROR_LOG.layout=org.apache.log4j.PatternLayout
log4j.appender.DAIY_ERROR_LOG.layout.ConversionPattern=[spring-demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

自定義等後續進行補充和完善


概念引用:https://baike.baidu.com/item/…

相關文章