Spring 中整合log4j日誌框架
阿新 • • 發佈:2018-11-13
構建專案,加入log4j日誌框架
在pom.xml加入以下依賴:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId >
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
在resource資料夾建立log4j.properties檔案
1 log4j.rootLogger = INFO, stdout, logfile
2 #日誌輸出到控制檯
3 log4j.appender.stdout = org.apache.log4j.ConsoleAppender
4 log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
5 log4j.appender.stdout.ConversionLayout = %d [%t] %-5p %c - %m%n
6 #日誌輸出到檔案
7 log4j.appender.logfile = org.apache.log4j.DailyRollingFileAppender
8 log4j.appender.logfile .File = /Users/yulinfeng/Log/log
9 log4j.appender.logfile.maxFileSize=10240KB #日誌的最大容量為10M
10 log4j.appender.logfile.Append = true #是否追加寫進檔案
11 log4j.appender.logfile.Threshold = DEBUG #輸出DEBUG級別日誌到檔案中
12 log4j.appender.logfile.layout = org.apache.log4j.PatternLayout
13 log4j.appender.logfile.layout.ConversionPattern = %d [%t] %-5p %c - %m%n
語法意義
第1行,log4j.rootLogger=INFO, stdout, logfile。這是log4j的根配置,第一個引數表示輸出什麼級別的日誌,後面的引數表示輸出的位置,位置可以是控制檯,也可以是檔案,語法為log4j.rootLogger=[level], appendername……,在這裡定義了兩個輸出位置,名字無所謂取設麼,有意義即可。日誌級別從高到低分別是:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,log4j建議只使用ERROR、WARN、INFO、DEBUG四個級別,也就是也就是在上面提到過的。
第3、7行就分別指定了stdout和logfile日誌的輸出位置,log4j一共提供了5個。
org.apache.log4j.ConsoleAppender(控制檯)
org.apache.log4j.FileAppender(檔案)
org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案)
org.apache.log4j.RollingFileAppender(檔案大小達到一定大小後產生一個新的檔案)
org.apache.log4j.WriterAppender(將日誌資訊以流格式傳送到任意位置)
第4行表示日誌資訊的格式,一共有以下幾種。
org.apache.log4j.HTMLLayout(以HTML表格輸出)
org.apache.log4j.PatternLayout(靈活的自定義格式輸出)
org.apache.log4j.SimpleLayout(簡單的格式輸出,只包括日誌級別和日誌資訊的字串)
org.apache.log4j.TTCCLayout(包含執行緒、日誌級別、日誌所在類和日誌資訊的字串)
通常為了更為靈活的列印日誌,我們會選擇PatternLayout佈局的日誌,同時通過ConversionPattern自定義輸出格式。
按照上面的配置,我們就可以在程式碼中進行日誌的輸出了。由於是在Spring框架下使用log4j,所以就要使用Spring對log4j進行初始化,在web.xml中對log4j進行初始化。
<web-app>
<display-name>log web</display-name>
<context-param>
<param-name>log4jConfigurationLocation</param-name>
<param-value>classpath*:log4j.properties</param-value>
</context-param>
<!--每隔60s掃描log4j的配置檔案,這裡配置的log4jRefreshInterval引數表示能不用重啟web伺服器就能動態更改log4j日誌級別,這也是和Spring整合的一大好處-->
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
<listener>
<!--從spring4.2.1開始Log4jConfigListener已經被廢棄,最好使用log4j2對應的org.apache.logging.log4j.web.Log4jServletContextListener
.Log4jServletContextListener-->
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
</web-app>
此時在程式碼邏輯中加入以下程式碼即可根據我們的配置輸出系統日誌。
private Logger log = Logger.getLogger(Test.class);
log.info(“test info”);