appender log4j 扩展_Log4j扩展使用--输出地Appender
OK,現在我們來研究輸出低Appended。
Appender控制日志輸出的位置
Log4j日志系統允許把日志輸出到不同的地方,如控制臺(Console)、文件(Files)、根據天數或者文件大小產生新的文件、以流的形式發送到其它地方等等。
Log4j內置了常用的輸出地,一般情況下配置一下即可使用,所有的Appender都實現了自org.apache.log4j.Appender接口。在log4j.properties中,Appended都使用log4j.appender.*配置。
常用的輸出位置有如下幾個:
ConsoleAppender(控制臺)
FileAppender(文件)
RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
DailyRollingFileAppender(每天產生一個日志文件)
JDBCAppender(輸出到JDBC數據庫)
SocketAppender(遠程日至服務器)
WriterAppender(將日志信息以流格式發送到任意指定的地方)
SMTPAppender(發送郵件)
配置時使用方式為:
log4j.appender.appenderName=fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1=value1
…log4j.appender.appenderName.optionN=valueN
也可以自己實現Appender接口, 這樣就為日志的輸出提供了相當大的便利。
這里我們來舉幾個例子,熟悉下常用的日志輸出。
1,輸出到控制臺
控制臺是最常用的輸出地,前面的一系列博客我們用的例子都是在控制臺輸出??刂婆_輸出實現類為org.apache.log4j.ConsoleAppender。
下面是一份比較完整的log4j.properties配置文件:
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點解釋:
1,我們在實際的配置文件中,"#"注釋必須另起一行
2,控制臺輸出需要配置layput屬性,最常用的就是正則表達式格式。還有一些可選的屬性,一般實際中不會怎么用到,Encoding設置編碼方式,ImmediateFlush設置是否緩存,Target設置輸出到System.out還是System.err。
3,Threshold用來設置該Appender的級別,只對本Appender生效。所有的Appender都可通過設置Threshold來設置本Appender的啟用級別。
2,輸出到文件
文件輸出FileAppender把日志輸出到指定的文件中,文件輸出的實現類為org.apache.log4j.FileAppender,配置時候需要用File指定文件名稱。當然,這個路徑可以使用相對路徑,也可以使用絕對路徑。
下面一份文件輸出的log4j.properties的配置文件:
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文件中。
現在我們來檢查下控制臺輸出沒有問題,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)]: 人工拋出一個異常
3,輸出到按大小滾動文件
按大小滾動文件輸出RollingFileAppender把日志輸出到指定的文件,文件達到指定的大小時,就會自動更名。按尺寸滾動文件輸出類為org.apache.log4j.RollingFileAppender,需配置文件名稱,文件的最大尺寸。
下面是一份配置文件:
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
4,輸出到按日志滾動文件
按日期滾動文件輸出DailyRollingFileAppender將日志輸出到指定的文件,當日期發生變化時,會將文件按照指定的日期格式自動改名。日期滾動文件輸出類為org.apache.log4j.DailyRollingFileAppender。
配置文件如下:
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-ww
3.每月:’.’YYYY-MM
4.每隔半天:’.’YYYY-MM-dd-a
5.每小時:’.’YYYY-MM-dd-HH
6.每分鐘:’.’YYYY-MM-dd-HH-mm
2,這種配置也是可能我們在實際編碼中最常用到的,項目發布到服務器上然后每天生成一個日志文件。
OK,上面我整理了最常用的幾種Appender,他們就是ConsoleAppender(控制臺),FileAppender(文件),RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),DailyRollingFileAppender(每天產生一個日志文件)。剩下的幾種我們一般不會用到,這里也就不做贅述了?,F在我們來整理下這4種Appender的關系。
上面的4種Appender都實現了Appender接口,然后ConsoleAppender和FileAppender同級別,FileAppender之下衍生出了2個子類RollingFileAppender,DailyRollingFileAppender。關于這些我會在后面的源碼系列中仔細的整理到的。
總結
以上是生活随笔為你收集整理的appender log4j 扩展_Log4j扩展使用--输出地Appender的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 好身材大姐姐学计算机惊喜用英语,英语作文
- 下一篇: java rhino 运行 js_Moz