OK,如今咱們來研究輸出低Appended。html
Log4j日誌系統容許把日誌輸出到不一樣的地方,如控制檯(Console)、文件(Files)、根據天數或者文件大小產生新的文件、以流的形式發送到其它地方等等。
Log4j內置了經常使用的輸出地,通常狀況下配置一下便可使用,全部的Appender都實現了自org.apache.log4j.Appender接口。在log4j.properties中,Appended都使用log4j.appender.*配置。
正則表達式
og4j.rootLogger=DEBUG,console # 如下是rootLogger的配置,子類默認繼承,可是子類重寫下面配置=rootLogger+本身配置,我暈 #輸出到控制檯 log4j.appender.console=org.apache.log4j.ConsoleAppender #設置輸出樣式 log4j.appender.console.layout=org.apache.log4j.PatternLayout #日誌輸出信息格式爲 log4j.appender.console.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n #DEBUG以上級別輸出,Threshold,入口,臨界值 #log4j.appender.console.Threshold=DEBUG #日誌編碼方式 #log4j.appender.console.Encoding=UTF-8 #是否當即輸出 #log4j.appender.console.ImmediateFlush=true #使用System.error做爲輸出 #log4j.appender.console.Target=System.error關於上面這份配置文件,有3點解釋:
log4j.category.org.linkinpark.commons.logtest1=ERROR,file log4j.rootLogger=DEBUG,console # 如下是rootLogger的配置,子類默認繼承,可是子類重寫下面配置=rootLogger+本身配置,我暈 #輸出到控制檯 log4j.appender.console=org.apache.log4j.ConsoleAppender #設置輸出樣式 log4j.appender.console.layout=org.apache.log4j.PatternLayout #日誌輸出信息格式爲 log4j.appender.console.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n #DEBUG以上級別輸出,Threshold,入口,臨界值 #log4j.appender.console.Threshold=DEBUG #日誌編碼方式 #log4j.appender.console.Encoding=UTF-8 #是否當即輸出 #log4j.appender.console.ImmediateFlush=true #使用System.error做爲輸出 #log4j.appender.console.Target=System.error #輸出到文件(這裏默認爲追加方式) log4j.appender.file=org.apache.log4j.FileAppender #輸出文件位置 log4j.appender.file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/log4j.log log4j.appender.file.Append=true #樣式爲TTCCLayout #log4j.appender.file.layout=org.apache.log4j.TTCCLayout log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n關於上面的配置文件我這裏解釋一下:
1,可選參數Append配置是否在源文件內容的基礎上追加日誌。若是是false,Logger初始化會先情清掉文件內容,也就是說每次重啓程序,原來的日誌就會丟失。若是爲true,日誌文件就會愈來愈大。默認爲true。數據庫
2,咱們上面用category屬性來從新定義咱們的本身的logtest1包下面的日誌輸出,而後指定日誌輸出到/Users/LinkinPark/WorkSpace/linkin-log-test/log/log4j.log文件中。apache
如今咱們來檢查下控制檯輸出沒有問題,category繼承了默認的rootLogger在控制檯輸出了,並且還在咱們上面指定的路徑下的日誌文件中追加進去了日誌內容。緩存
➜ WorkSpace cd linkin-log-test ➜ linkin-log-test ls pom.xml src target ➜ linkin-log-test pwd /Users/LinkinPark/WorkSpace/linkin-log-test ➜ linkin-log-test ls log pom.xml src target ➜ linkin-log-test cd log ➜ log ls log4j.log ➜ log more log4j.log [2016-02-23 09:52:48]-[main-ERROR]-[org.linkinpark.commons.logtest1.Log4jTest1-logTest(30)]: error級別的日誌輸出 [2016-02-23 09:52:48]-[main-FATAL]-[org.linkinpark.commons.logtest1.Log4jTest1-logTest(31)]: fatal級別的日誌輸出 [2016-02-23 09:52:48]-[main-ERROR]-[org.linkinpark.commons.logtest1.Log4jTest1-logTest(38)]: 人工拋出一個異常
log4j.category.org.linkinpark.commons.logtest1=ERROR,file,rolling_file log4j.rootLogger=DEBUG,console # 如下是rootLogger的配置,子類默認繼承,可是子類重寫下面配置=rootLogger+本身配置,我暈 #輸出到控制檯 log4j.appender.console=org.apache.log4j.ConsoleAppender #設置輸出樣式 log4j.appender.console.layout=org.apache.log4j.PatternLayout #日誌輸出信息格式爲 log4j.appender.console.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n #DEBUG以上級別輸出,Threshold,入口,臨界值 #log4j.appender.console.Threshold=DEBUG #日誌編碼方式 #log4j.appender.console.Encoding=UTF-8 #是否當即輸出 #log4j.appender.console.ImmediateFlush=true #使用System.error做爲輸出 #log4j.appender.console.Target=System.error #輸出到文件(這裏默認爲追加方式) log4j.appender.file=org.apache.log4j.FileAppender #輸出文件位置 log4j.appender.file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/log4j.log #是否在原日誌基礎上追加輸出日誌。true,默認,追加。false,清掉原來日誌從新添加 log4j.appender.file.Append=true #樣式爲TTCCLayout #log4j.appender.file.layout=org.apache.log4j.TTCCLayout log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n #按大小滾動文件(這裏默認爲追加方式) log4j.appender.rolling_file=org.apache.log4j.RollingFileAppender #輸出文件位置 log4j.appender.rolling_file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/rolling_log4j.log log4j.appender.rolling_file.Append=true #文件達到最大值自動改名 log4j.appender.rolling_file.MaxFileSize=1KB #最多備份100個文件 log4j.appender.rolling_file.MaxBackupIndex=100 log4j.appender.rolling_file.layout=org.apache.log4j.PatternLayout log4j.appender.rolling_file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n關於上面的配置文件解釋以下:
1,配置的滾動文件名爲rolling_log4j,該文件在/Users/LinkinPark/WorkSpace/linkin-log-test/log/rolling_log4j.log路徑中,咱們設置了文件最大爲1K。當rolling_log4j.log達到1K時,就會自動改名爲rolling_log4j.log.1,rolling_log4j.log.2,rolling_log4j.log.3....直到rolling_log4j.log.100。
2,Logger支持多個Appender,用逗號將多個Appender名字隔開便可。
屢次運行咱們本身寫的測試類,會發現rolling_log4j.log文件在滾動。下面我貼出具體的文件日誌輸出:
服務器
➜ linkin-log-test cd log ➜ log ls -l total 16 -rw-r--r-- 1 LinkinPark staff 1110 2 23 10:17 log4j.log -rw-r--r-- 1 LinkinPark staff 364 2 23 10:17 rolling_log4j.log ➜ log ls -l total 16 -rw-r--r-- 1 LinkinPark staff 1850 2 23 10:18 log4j.log -rw-r--r-- 1 LinkinPark staff 0 2 23 10:18 rolling_log4j.log -rw-r--r-- 1 LinkinPark staff 1092 2 23 10:18 rolling_log4j.log.1 ➜ log ls -l total 24 -rw-r--r-- 1 LinkinPark staff 2220 2 23 10:18 log4j.log -rw-r--r-- 1 LinkinPark staff 364 2 23 10:18 rolling_log4j.log -rw-r--r-- 1 LinkinPark staff 1092 2 23 10:18 rolling_log4j.log.1 ➜ log ls -l total 24 -rw-r--r-- 1 LinkinPark staff 2590 2 23 10:19 log4j.log -rw-r--r-- 1 LinkinPark staff 728 2 23 10:19 rolling_log4j.log -rw-r--r-- 1 LinkinPark staff 1092 2 23 10:18 rolling_log4j.log.1 ➜ log ls -l total 24 -rw-r--r-- 1 LinkinPark staff 2960 2 23 10:19 log4j.log -rw-r--r-- 1 LinkinPark staff 0 2 23 10:19 rolling_log4j.log -rw-r--r-- 1 LinkinPark staff 1092 2 23 10:19 rolling_log4j.log.1 -rw-r--r-- 1 LinkinPark staff 1092 2 23 10:18 rolling_log4j.log.2
按日期滾動文件輸出DailyRollingFileAppender將日誌輸出到指定的文件,當日期發生變化時,會將文件按照指定的日期格式自動更名。日期滾動文件輸出類爲org.apache.log4j.DailyRollingFileAppender。
配置文件以下:app
log4j.category.org.linkinpark.commons.logtest1=ERROR,file,rolling_file,daily_rolling_file log4j.rootLogger=DEBUG,console # 如下是rootLogger的配置,子類默認繼承,可是子類重寫下面配置=rootLogger+本身配置,我暈 #輸出到控制檯 log4j.appender.console=org.apache.log4j.ConsoleAppender #設置輸出樣式 log4j.appender.console.layout=org.apache.log4j.PatternLayout #日誌輸出信息格式爲 log4j.appender.console.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n #DEBUG以上級別輸出,Threshold,入口,臨界值 #log4j.appender.console.Threshold=DEBUG #日誌編碼方式 #log4j.appender.console.Encoding=UTF-8 #是否當即輸出 #log4j.appender.console.ImmediateFlush=true #使用System.error做爲輸出 #log4j.appender.console.Target=System.error #輸出到文件(這裏默認爲追加方式) log4j.appender.file=org.apache.log4j.FileAppender #輸出文件位置 log4j.appender.file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/log4j.log #是否在原日誌基礎上追加輸出日誌。true,默認,追加。false,清掉原來日誌從新添加 log4j.appender.file.Append=true #樣式爲TTCCLayout #log4j.appender.file.layout=org.apache.log4j.TTCCLayout log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n #按大小滾動文件(這裏默認爲追加方式) log4j.appender.rolling_file=org.apache.log4j.RollingFileAppender #輸出文件位置 log4j.appender.rolling_file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/rolling_log4j.log log4j.appender.rolling_file.Append=true #文件達到最大值自動改名 log4j.appender.rolling_file.MaxFileSize=1KB #最多備份100個文件 log4j.appender.rolling_file.MaxBackupIndex=100 log4j.appender.rolling_file.layout=org.apache.log4j.PatternLayout log4j.appender.rolling_file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n #按日期滾動文件 log4j.appender.daily_rolling_file=org.apache.log4j.DailyRollingFileAppender #輸出文件位置 log4j.appender.daily_rolling_file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/daily_rolling_log4j.log #文件滾動日期格式 log4j.appender.daily_rolling_file.DatePattern=.yyyy-MM-dd log4j.appender.daily_rolling_file.layout=org.apache.log4j.PatternLayout log4j.appender.daily_rolling_file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n關於上面的配置文件解釋以下:
1,上面的配置中,咱們新添加DailyRollingFileAppender類型的Appender。咱們的日誌文件名稱爲daily_rolling_file,日期格式爲yyyy-MM-dd。進入到新的一天後,文件就會被自動改名,格式爲daily_rolling_file.2008-08-08。測試
天天:’.’YYYY-MM-dd(默認)編碼
2. 每星期:’.’YYYY-wwspa
3. 每個月:’.’YYYY-MM
4. 每隔半天:’.’YYYY-MM-dd-a
5. 每小時:’.’YYYY-MM-dd-HH
6. 每分鐘:’.’YYYY-MM-dd-HH-mm
OK,上面我整理了最經常使用的幾種Appender,他們就是ConsoleAppender(控制檯),FileAppender(文件),RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),DailyRollingFileAppender(天天產生一個日誌文件)。剩下的幾種咱們通常不會用到,這裏也就不作贅述了。如今咱們來整理下這4種Appender的關係。
上面的4種Appender都實現了Appender接口,而後ConsoleAppender和FileAppender同級別,FileAppender之下衍生出了2個子類RollingFileAppender,DailyRollingFileAppender。關於這些我會在後面的源碼系列中仔細的整理到的。