spring+maven專案新增log4j和slf4j日誌
1 Pom.xml新增依賴包
slf4j-log4j12這個包依賴了slf4j和log4j,所以使用slf4j+log4j的組合只要配置上面這一個依賴就夠了
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
2 在src/main/resources下建立conf資料夾
3 修改web.xml
webAppRootKey為自動獲取專案路徑
<context-param> <param-name >webAppRootKey</param-name > <param-value >webApp.root </param-value > </context-param > <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:/conf/log4j.properties</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
4 在WEB-INFO下新建logs資料夾
在linux下如果資料夾不存在則不會自動建立,war包不會自動編譯。所以在專案中建立好資料夾
5 在src/main/resources/conf下建立並配置配置檔案檔案log4j.properties
按照log優先順序,記錄error的日誌避免日誌過大。其中如果logger不指定debug或者info,則配置的日誌不會自動記錄
#logger log4j.rootLogger=debug,errorLogFile log4j.additivity.org.apache=false # errorLog appender log4j.appender.errorLogFile=org.apache.log4j.RollingFileAppender log4j.appender.errorLogFile.MaxFileSize=4MB log4j.appender.errorLogFile.Threshold=ERROR log4j.appender.errorLogFile.ImmediateFlush=true log4j.appender.errorLogFile.Append=true log4j.appender.errorLogFile.File=${webApp.root}/WEB-INF/logs/errorLog.log # errorLog layout log4j.appender.errorLogFile.layout=org.apache.log4j.PatternLayout log4j.appender.errorLogFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n
參考:
日誌配置:
自動獲取專案路徑:
日誌等級優先順序:
---------------------------------------------------------------------分割線----------------------------------------------------------------------
後續補充:
後期檢視日誌,發現有中文亂碼現象,是因為日誌配置檔案沒有加上編碼格式,需要加入“log4j.appender.errorLogFile.encoding=UTF-8”,更改後的配置檔案內容如下
# logger
log4j.rootLogger=debug,errorLogFile
log4j.additivity.org.apache=false
# errorLog appender
log4j.appender.errorLogFile=org.apache.log4j.RollingFileAppender
log4j.appender.errorLogFile.MaxFileSize=4MB
log4j.appender.errorLogFile.Threshold=ERROR
log4j.appender.errorLogFile.ImmediateFlush=true
log4j.appender.errorLogFile.Append=true
log4j.appender.errorLogFile.File=${webApp.root}/WEB-INF/logs/errorLog.log
log4j.appender.errorLogFile.encoding=UTF-8
# errorLog layout
log4j.appender.errorLogFile.layout=org.apache.log4j.PatternLayout
log4j.appender.errorLogFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n
---------------------------------------------------------------------分割線----------------------------------------------------------------------
後續補充:
在每次打war包,釋出專案,若按照最開始的設定方式會把伺服器已有的log日誌覆蓋掉,所以採用其他路徑來配置,使用${catalina.home}來設定日誌存放位置,該種設定不會造成伺服器可以存本地無法存,這樣伺服器和本地的...tomact/logs/...下面都會有日誌檔案,配置如下:
# logger
log4j.rootLogger=debug,errorLogFile
log4j.additivity.org.apache=false
# errorLog appender
log4j.appender.errorLogFile=org.apache.log4j.RollingFileAppender
log4j.appender.errorLogFile.MaxFileSize=4MB
log4j.appender.errorLogFile.Threshold=ERROR
log4j.appender.errorLogFile.ImmediateFlush=true
log4j.appender.errorLogFile.Append=true
log4j.appender.errorLogFile.File=${catalina.home}/logs/emrserch/error.log
log4j.appender.errorLogFile.encoding=UTF-8
# errorLog layout
log4j.appender.errorLogFile.layout=org.apache.log4j.PatternLayout
log4j.appender.errorLogFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n