1. 程式人生 > >spring+maven專案新增log4j和slf4j日誌

spring+maven專案新增log4j和slf4j日誌

1 Pom.xml新增依賴包

slf4j-log4j12這個包依賴了slf4jlog4j,所以使用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