1. 程式人生 > >log4j配置引數詳解——按日誌檔案大小、日期切分日誌檔案

log4j配置引數詳解——按日誌檔案大小、日期切分日誌檔案

     專案中儘管對log4j有基本的配置,例如按天生成日誌檔案以作區分,但如果系統日誌檔案過大,則就需要考慮以更小的單位切分或者其他切分方式。下面就總結一下log4j常用的配置引數以及切分日誌的不同方式。

一、基本配置解析

     常用配置1:

#日誌級別,還可以log4j.rootLogger=INFO,file2,file3 指定file2、3的輸出檔案
log4j.rootLogger=info,exception,thread  

#info
	#每一天產生1個日誌檔案
	log4j.appender.info=org.apache.log4j.DailyRollingFileAppender 
	#定義日誌存放路徑
	log4j.appender.info.File=/usr/tomcat_logs/mailSystem_info.log
	#日誌檔案是否追加
	log4j.appender.info.Append=true
	#定義的時間格式,如果時間定義到分鐘(mm)就是每分鐘生成一個日誌檔案,而這裡定義的這個格式就是日誌名字尾
	#log4j.appender.file3.DatePattern='_' yyyy-MM-dd-HH-mm  每分鐘
	#log4j.appender.file3.DatePattern='_' yyyy-MM-dd-HH    每小時
	#log4j.appender.file3.DatePattern='_' yyyy-MM-dd	每天
	#log4j.appender.file3.DatePattern='_' yyyy-MM-dd-a	每半天
	
	#日誌輸出級別
	log4j.appender.info.Threshold=INFO
	#日誌編碼
	#log4j.appender.file3.Encoding=UTF-8 
	#日誌中輸出的日誌的格式
	log4j.appender.info.layout=org.apache.log4j.PatternLayout
	#定義的日誌格式
	log4j.appender.info.layout.ConversionPattern=%t %d %p [%c] - %m%n
     常用配置2:
#debug
	log4j.appender.debug=org.apache.log4j.RollingFileAppender
	log4j.appender.debug.File=/usr/tomcat_logs/mailSystem_debug.log
	#設定日誌檔案的大小
	log4j.appender.debug.MaxFileSize=100M
	#儲存10個備份檔案
	log4j.appender.debug.MaxBackupIndex=10
	log4j.appender.debug.Append=true
	log4j.appender.debug.Threshold=DEBUG
	log4j.appender.debug.layout=org.apache.log4j.PatternLayout
	log4j.appender.debug.layout.ConversionPattern=%t %d %p [%c] - %m%n
	
     配置1採用DailyRollingFileAppender類,可定義日誌按照log4j給定的引數值進行配置,配置2使用RollingFileAppender。兩者都為log4j配置的核心類。在下進行詳細介紹。

二、配置核心類解析

CLASS1:DailyRollingFileAppender

  在配置1中使用到DailyRollingFileAppender,該類繼承與FileAppender,so that the underlying file is rolled over at a user chosen frequency.

The rolling schedule is specified by the “DatePattern” option。使用這些rolling schedule 需要注意一個

字首問題。例如if the “File” option is set to   “/foo/bar.log” and the “DatePattern” set to '.'yyyy-MM-dd ,則到了midnight,the logging file /foo/bar.log will be copied to   "/foo/bar.log.2017-01-01",也就是在bar.log檔案後新增 ".yyyy-MM-dd"字尾。It is possible to specify monthly, weekly,half-daily, daily,hourly, or minutely rollover schedules.

總共有:

切分型別

切分前

切分後

按月'.'yyyy-MM

/foo/bar.log

/foo/bar.log.2002-05

按周 '.'yyyy-ww

/foo/bar.log

/foo/bar.log.2002-23

按天 '.'yyyy-MM-dd

/foo/bar.log

/foo/bar.log.2002-03-08 default

半天 '.'yyyy-MM-dd-a

/foo/bar.log

/foo/bar.log.2002-03-09-AM

按時 '.'yyyy-MM-dd-HH

/foo/bar.log

/foo/bar.log.2002-03-09-10

按分 '.'yyyy-MM-dd-HH-mm

/foo/bar.log

/foo/bar.log.2001-03-09-10-22

 public DailyRollingFileAppender (Layout layout, String filename,
				   String datePattern) throws IOException {
    super(layout, filename, true);
    this.datePattern = datePattern;
    activateOptions();
  }
這些引數策略會傳入到DailyRollingFileAppender的初始化方法中,建立一個DailyRollingFileAppender物件。

CLASS2:RollingFileAppender

配置2中使用到另一個類RollingFileAppender,這個類也繼承子FileAppender,用於按照一定的size檔案大小,back up 日誌檔案。

這個類中起關鍵作用的兩個引數maxFileSize和maxBackupIndex,用於確定每個日誌檔案的size大小和備份個數。預設分別為10MB和1.按照設定的index大小,會預設將檔案copy to .1,.2等檔案字尾進行備份。

CLASS3: PatternLayout

在兩個配置中,均使用PatternLayout和ConventionPattern類,PatternLayout主要用於日誌輸出相關,ConventionPattern用於定義日誌檔案的輸出格式。其中ConventionPattern支援多種型別的日誌輸出,如執行緒資訊、類資訊,均已%打頭進行配置,詳情如下:

%c 輸出日誌資訊所屬的類的全名,例如%c{2},對於com.max.spring.demo,便會輸出spring.demo兩級類資訊。
%d 輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyy-MM-dd HH:mm:ss },輸出類似:2002-10-18- 22:10:28
%f 輸出日誌資訊所屬的類的類名
%l 輸出日誌事件的發生位置,即輸出日誌資訊的語句處於它所在的類的第幾行
%m 輸出程式碼中指定的資訊,如log(message)中的message
%n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”
%p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL。如果是呼叫debug()輸出的,則為DEBUG,依此類推
%r 輸出自應用啟動到輸出該日誌資訊所耗費的毫秒數
%t 輸出產生該日誌事件的執行緒名

三、切分效果

按照日期切分日誌:           按照檔案大小切分日誌: