Log4j使用相對路徑指定log文件及使用總結

原文地址:http://huanyue.iteye.com/blog/574598

Log4j在指定log文件位置時一般是使用絕對路徑,這樣在部署環境發生變化時顯得十分麻煩,在網上找了很多種方法,個人感覺以下方法比較適用:

由於spring也會加載log4j.properties,如果加載不到就往控制檯打log信息。Spring提供了 一個Log4jConfigListener,本身就能通過web.xml中配置來指定位置加載log4j配置文件和log輸出路徑,注意該 listener需要放在spring的Listener之前。 
事實上,Log4jConfigListener更適合log4j在web工程中使用,原因如下: 
1. 動態的改變記錄級別和策略,不需要重啓Web應用,如《Effective Enterprise Java》所說。 
2. 把log文件定在 /WEB-INF/logs/ 而不需要寫絕對路徑。 
因爲 系統把web目錄的路徑壓入一個叫webapp.root的系統變量。這樣寫log文件路徑時不用寫絕對路徑了. 
log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/settlement.log 
3. 可以把log4j.properties和其他properties一起放在/WEB-INF/ ,而不是Class-Path。 
4. log4jRefreshInterval爲60000表示 開一條watchdog線程每60秒掃描一下配置文件的變化; 
在web.xml 添加

[xml] view plain copy
  1. <context-param>      
  2.         <param-name>log4jConfigLocation</param-name>      
  3.         <param-value>WEB-INF/log4j.properties</param-value>      
  4.   
  5. </context-param>         
  6. <context-param>      
  7.         <param-name>log4jRefreshInterval</param-name>      
  8.         <param-value>60000</param-value>      
  9. </context-param>   
  10.         <listener>      
  11.         <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>      
  12.   
  13. </listener>  

log4j配置文件如下:

[xml] view plain copy
  1. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  2. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  3. log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n  
  4. log4j.rootLogger=info, stdout,R  
  5.   
  6. log4j.appender.R=org.apache.log4j.DailyRollingFileAppender  
  7. log4j.appender.R.File=${webapp.root}/WEB-INF/logs/settlement.log  
  8. log4j.appender.R.DatePattern = "."yyyy-MM  
  9. log4j.appender.R.layout=org.apache.log4j.PatternLayout  
  10. log4j.appender.R.layout.ConversionPattern=%d %p [%c] - %m%n  

另:

Log4j提供的appender有以下幾種
o org.apache.log4j.ConsoleAppender(控制檯)
o org.apache.log4j.FileAppender(文件)
o org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)
o org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
o org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)

我們開發的B/S結構系統,在服務端一般要有日常運行的日誌記錄。保存成日誌文件形式的時候,大家經常會遇到一個問題:日誌文件過大。上百兆的日誌文件對 查閱日誌信息來說也是一個問題。所以我希望能夠每天或每個月產生一個日誌文件,這樣文件不至於過大。 或者根據日誌文件大小來判斷,超過規定大小,日誌自動增加新文件。

在log4j中這兩種方式的實現都很簡單,只要在配置文件中設置即可。

一、按照一定時間產生日誌文件,配置文件如下:

# Set root logger level to ERROR and its only appender to A1.

log4j.rootLogger=ERROR,R

# R is set to be a DailyRollingFileAppender.

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

log4j.appender.R.File=backup.log

log4j.appender.R.DatePattern = "."yyyy-MM-dd

log4j.appender.R.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

以上配置是每天產生一個備份文件。其中備份文件的名字叫backup.log。

具體的效果是這樣:當天的日誌信息記錄在backup.log文件中,前一天的記錄在名稱爲 backup.log.yyyy-mm-dd 的文件中。

類似的,如果需要每月產生一個文件可以修改上面的配置:

log4j.appender.R.DatePattern = "."yyyy-MM-dd

改爲

log4j.appender.R.DatePattern = "."yyyy-MM

二、根據日誌文件大小自動產生新日誌文件

配置文件內容如下:

# Set root logger level to ERROR and its only appender to A1.

log4j.rootLogger=ERROR,R

# R is set to be a RollingFileAppender.

log4j.appender.R=org.apache.log4j.RollingFileAppender

log4j.appender.R.File=backup.log

#log4j.appender.R.MaxFileSize=100KB

# Keep one backup file

log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

其中:

#日誌文件的大小

log4j.appender.R.MaxFileSize=100KB

# 保存一個備份文件

log4j.appender.R.MaxBackupIndex=1

另:

日誌顯示級別:

它們定義了日誌顯示的級別,一共分爲五個級別:DEBUG、INFO、WARN、ERROR和FATAL。這五個級別是有順序的,DEBUG < INFO < WARN < ERROR < FATAL,明白這一點很重要,這裏Log4j有一個規則:假設設置了級別爲P,如果發生了一個級別Q比P高,則可以啓動,否則屏蔽掉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章