log4j主要由三大組件組成:
Logger :log4j的日志實(shí)例。
static Level DEBUG,INFO,WARN,ERROR,FATAL,ALL,OFF.
DEBUG Level指出細(xì)粒度信息事件對調(diào)試應(yīng)用程序是非常有幫助的,。
INFO level表明 消息在粗粒度級別上突出強(qiáng)調(diào)應(yīng)用程序的運(yùn)行過程,。
WARN level表明會出現(xiàn)潛在錯誤的情形,。
ERROR level指出雖然發(fā)生錯誤事件,但仍然不影響系統(tǒng)的繼續(xù)運(yùn)行,。
FATAL level指出每個嚴(yán)重的錯誤事件將會導(dǎo)致應(yīng)用程序的退出,。
另外,還有兩個可用的特別的日志記錄級別:
ALL Level是最低等級的,,用于打開所有日志記錄,。
OFF Level是最高等級的,用于關(guān)閉所有日志記錄,。
Appender :定義log4j輸出目的地,。
org.apache.log4j.ConsoleAppender(控制臺),
org.apache.log4j.FileAppender(文件),,
org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個日志文件),,
org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時候產(chǎn)生一個新的文件),
org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)
ConsoleAppender選項(xiàng)
Threshold=DEBUG:指定日志消息的輸出最低層次,。
ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會被立即輸出,。
Target=System.err:默認(rèn)情況下是:System.out,指定輸出控制臺
1.FileAppender 選項(xiàng)
Threshold=DEBUF:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會被立即輸出,。
File=mylog.txt:指定消息輸出到mylog.txt文件,。
Append=false:默認(rèn)值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容,。
2.RollingFileAppender 選項(xiàng)
Threshold=DEBUG:指定日志消息的輸出最低層次,。
ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件,。
Append=false:默認(rèn)值是true,即將消息增加到指定文件中,,false指將消息覆蓋指定的文件內(nèi)容。
MaxFileSize=100KB: 后綴可以是KB, MB 或者是 GB. 在日志文件到達(dá)該大小時,,將會自動滾動,,即將原來的內(nèi)容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以產(chǎn)生的滾動文件的最大數(shù),。
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
3.DailyRollingFileAppender 選項(xiàng)
Threshold=WARN:指定日志消息的輸出最低層次,。
ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件,。
Append=false:默認(rèn)值是true,即將消息增加到指定文件中,,false指將消息覆蓋指定的文件內(nèi)容。
DatePattern='.'yyyy-ww:每周滾動一次文件,,即每周產(chǎn)生一個新的文件,。當(dāng)然也可以指定按月、周,、天,、時和分。即對應(yīng)的格式如下:
1)'.'yyyy-MM: 每月
2)'.'yyyy-ww: 每周
3)'.'yyyy-MM-dd: 每天
4)'.'yyyy-MM-dd-a: 每天兩次
5)'.'yyyy-MM-dd-HH: 每小時
6)'.'yyyy-MM-dd-HH-mm: 每分鐘
Layout :定義log4j輸出的格式,。
org.apache.log4j.HTMLLayout(以HTML表格形式布局),,
org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),,
org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時間,、線程、類別等等信息)
日志信息格式中幾個符號所代表的含義:
-X號: X信息輸出時左對齊,;
%p: 輸出日志信息優(yōu)先級,,即DEBUG,INFO,,WARN,,ERROR,F(xiàn)ATAL,
%d: 輸出日志時間點(diǎn)的日期或時間,,默認(rèn)格式為ISO8601,,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},,輸出類似:2002年10月18日 22:10:28,,921
%r: 輸出自應(yīng)用啟動到輸出該log信息耗費(fèi)的毫秒數(shù)
%c: 輸出日志信息所屬的類目,通常就是所在類的全名
%t: 輸出產(chǎn)生該日志事件的線程名
%l: 輸出日志事件的發(fā)生位置,,相當(dāng)于%C.%M(%F:%L)的組合,包括類目名,、發(fā)生的線程,以及在代碼中的行數(shù),。舉例:Testlog4.main (TestLog4.java:10)
%x: 輸出和當(dāng)前線程相關(guān)聯(lián)的NDC(嵌套診斷環(huán)境),尤其用到像java servlets這樣的多客戶多線程的應(yīng)用中,。
%%: 輸出一個"%"字符
%F: 輸出日志消息產(chǎn)生時所在的文件名稱
%L: 輸出代碼中的行號
%m: 輸出代碼中指定的消息,產(chǎn)生的日志具體信息
%n: 輸出一個回車換行符,Windows平臺為"/r/n",,Unix平臺為"/n"輸出日志信息換行
可以在%與模式字符之間加上修飾符來控制其最小寬度,、最大寬度、和文本的對齊方式,。如:
1)%20c:指定輸出category的名稱,,最小的寬度是20,如果category的名稱小于20的話,,默認(rèn)的情況下右對齊,。
2)%-20c:指定輸出category的名稱,最小的寬度是20,,如果category的名稱小于20的話,,"-"號指定左對齊。
3)%.30c:指定輸出category的名稱,最大的寬度是30,,如果category的名稱大于30的話,,就會將左邊多出的字符截掉,但小于30的話也不會有空格,。
4)%20.30c:如果category的名稱小于20就補(bǔ)空格,,并且右對齊,如果其名稱長于30字符,,就從左邊較遠(yuǎn)輸出的字符截掉,。
理論就理解這么多了,以后有機(jī)會用的時候再去說吧?,F(xiàn)在說多了怕錯的多了,。
下面來看看怎么使用:
首先導(dǎo)入log4j需要的包:我用的是 dom4j-1.6.1.jar。這個到Apache去下,。
然后添加配置文件:log4j.properties or log4j.xml(其實(shí)這兩個還是有點(diǎn)區(qū)別的,,首先系統(tǒng)會去找xml,找不到xml配置的時候才去讀properties文件,,有
人說properties的方案以后會被淘汰掉,,這個我就不知道了,我唯一用過的還是properties,,不敢多說),,把我以前用log4j的時候
使用的properties文件先貼下來:
其實(shí)log4j的記錄不僅僅是記錄到console,file,,還可以到mail,,jdbc。
根Logger的配置:設(shè)置輸出的優(yōu)先級,,log4j.rootLogger = [ level ] , appenderName, appenderName, …
### global config ###
# log level: DEBUG<INFO<WARN<ERROR<FATAL
log4j.rootLogger=DEBUG,console,file
### appender of console ###
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%-5p %5r %c] ->Thread:%t -file:%F -line:%L -content:%m%n
### appender of file ###
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=c:/exam.log
log4j.appender.file.MaxFileSize=100KB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%-5p %5r %d{yyyy-MM-dd HH/:mm/:ss.SSS} %c] -> -%F%L -%m%n
然后就可以使用了: package com.yixun.wap;
import org.apache.log4j.Logger;
public class TestLog4j {
private static Logger logger = Logger.getLogger(TestLog4j. class );
public static void main(String[] args) {
logger.debug( " debug " );
logger.info( " info " );
logger.warn( " warn " );
logger.error( " error " );
logger.faltal( " faltal " );
}
} 不完全點(diǎn),,待續(xù)……
/**********************csdn上down的,沒用過,,貌似是比較全 **************************/
log4j.rootLogger=DEBUG,CONSOLE,DATABASE,FILE
log4j.addivity.org.apache=true
# 應(yīng)用于控制臺
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.Encoding=GBK
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 用于數(shù)據(jù)庫
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:oracle:thin:@90.0.12.20:1521:ORCL
log4j.appender.DATABASE.driver=oracle.jdbc.driver.OracleDriver
log4j.appender.DATABASE.user=Nation
log4j.appender.DATABASE.password=1
log4j.appender.CONSOLE.Threshold=WARN
log4j.appender.DATABASE.sql=INSERT INTO LOG4J(stamp,thread, infolevel,class,messages) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')
# INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
# 寫入數(shù)據(jù)庫中的表LOG4J的Message字段中,,內(nèi)容%d(日期)%c: 日志信息所在地(類名)%p: 日志信息級別%m: 產(chǎn)生的日志具體信息 %n: 輸出日志信息換行
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 每天新建日志
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=C:/log4j/log
log4j.appender.A1.Encoding=GBK
log4j.appender.A1.Threshold=DEBUG
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n
#應(yīng)用于文件
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=C:/log4j/file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.Encoding=GBK
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 應(yīng)用于文件回滾
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.CONSOLE_FILE.Encoding=GBK
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#自定義Appender
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = [email protected]
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#應(yīng)用于socket
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
# Log Factor 5 Appender
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
# 發(fā)送日志給郵件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
[email protected]
log4j.appender.MAIL.SMTPHost=www.wusetu.com
log4j.appender.MAIL.Subject=Log4J Message
[email protected]
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
注意事項(xiàng)——Ant編譯影響Log4j
使用Ant編譯時,javac有個debug屬性,,需要特別注意,,debug屬性默認(rèn)為false,若debug屬性為false的話,,會影響log4j,,導(dǎo)致log4j不能顯示日志發(fā)生的行數(shù)(在日志發(fā)生的行數(shù)處顯示?),。
如lo4j的配置為:
log4j.appender.dq.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
在javac的debug="false" 時編譯,,即
<javac srcdir="${src}" destdir="${class}" classpathref="classpath" />
日志輸出為:
2009-01-16 10:15:23 DEBUG ConnectPoint:? - [connect point]request incoming
在debug="true"時編譯,,即
<javac srcdir="${src}" destdir="${class}" classpathref="classpath" debug="true"/>
日志輸出為:
2009-01-16 10:16:32 DEBUG ConnectPoint:40 - [connect point]request incoming.
即Ant編譯時javac的debug屬性會影響logj的%L。