定義
log4j是Apache的一個(gè)開放源代碼項(xiàng)目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件,甚至是套接口服務(wù)器、NT的事件記錄器、UNIXSyslog守護(hù)進(jìn)程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細(xì)致地控制日志的生成過程。最令人感興趣的就是,這些可以通過一個(gè)配置文件來靈活地進(jìn)行配置,而不需要修改應(yīng)用的代碼。
一、log4j.PRoperties 的使用詳解
1.輸出級別的種類
ERROR、WARN、INFO、DEBUGERROR 為嚴(yán)重錯(cuò)誤 主要是程序的錯(cuò)誤WARN 為一般警告,比如session丟失INFO 為一般要顯示的信息,比如登錄登出DEBUG 為程序的調(diào)試信息
2.配置日志信息輸出目的地
log4j.appender.appenderName = fully.qualified.name.of.appender.class1.org.apache.log4j.ConsoleAppender(控制臺)2.org.apache.log4j.FileAppender(文件)3.org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個(gè)日志文件)4.org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時(shí)候產(chǎn)生一個(gè)新的文件)5.org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)
3.配置日志信息的格式
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),2.org.apache.log4j.PatternLayout(可以靈活地指定布局模式),3.org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),4.org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間、線程、類別等等信息)
4.控制臺選項(xiàng)
Threshold=DEBUG:指定日志消息的輸出最低層次。ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會(huì)被立即輸出。Target=System.err:默認(rèn)情況下是:System.out,指定輸出控制臺FileAppender 選項(xiàng)Threshold=DEBUF:指定日志消息的輸出最低層次。ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會(huì)被立即輸出。File=mylog.txt:指定消息輸出到mylog.txt文件。Append=false:默認(rèn)值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容。RollingFileAppender 選項(xiàng)Threshold=DEBUG:指定日志消息的輸出最低層次。ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會(huì)被立即輸出。File=mylog.txt:指定消息輸出到mylog.txt文件。Append=false:默認(rèn)值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容。MaxFileSize=100KB: 后綴可以是KB, MB 或者是 GB. 在日志文件到達(dá)該大小時(shí),將會(huì)自動(dòng)滾動(dòng),即將原來的內(nèi)容移到mylog.log.1文件。MaxBackupIndex=2:指定可以產(chǎn)生的滾動(dòng)文件的最大數(shù)。log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
5.日志信息格式中幾個(gè)符號所代表的含義:
-X號: X信息輸出時(shí)左對齊;%p: 輸出日志信息優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL,%d: 輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921%r: 輸出自應(yīng)用啟動(dò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)用中。%%: 輸出一個(gè)"%"字符%F: 輸出日志消息產(chǎn)生時(shí)所在的文件名稱%L: 輸出代碼中的行號%m: 輸出代碼中指定的消息,產(chǎn)生的日志具體信息%n: 輸出一個(gè)回車換行符,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的話,就會(huì)將左邊多出的字符截掉,但小于30的話也不會(huì)有空格。4) %20.30c:如果category的名稱小于20就補(bǔ)空格,并且右對齊,如果其名稱長于30字符,就從左邊較遠(yuǎn)輸出的字符截掉。
二、log4j.properties的配置
1、配置步驟
1) 把log4j-*.*jar引入項(xiàng)目中,如果是java web項(xiàng)目,可以直接放在lib中 2) 在web.xml文件中配置
<!-- log4j 配置 開始 --> <context-param> <param-name> log4jConfigLocation </param-name > <param-value> /WEB-INF/classes/log4j.properties </param-value > </context-param> <context-param> <param-name> log4jRefreshInterval </param-name > <param-value> 600000 </param-value > </context-param>3) 編寫log4j.properties文件
log4j.rootCategory=INFO,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern= [NGBOSSmonitor] %p [%t] %C.%M(%L) | %m%nlog4j.appender.RollingFile.File=logs/monitor.loglog4j.appender.RollingFile.layout=org.apache.log4j.PatternLayoutlog4j.logger.com.test=debuglog4j.logger.com.ibatis=debuglog4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debuglog4j.logger.com.ibatis.common.jdbc.ScriptRunner=debuglog4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debuglog4j.logger.java.sql.Connection=debuglog4j.logger.java.sql.Statement=debuglog4j.logger.java.sql.PreparedStatement=debug,stdout4)、Logger調(diào)用
在每一個(gè)要產(chǎn)生日志的類上面加上這句,MonitorMessageController為該類的名字。
private final Logger log= Logger.getLogger(MonitorMessageController.class);
通過以上的配置,即可在運(yùn)行的過程中在控制臺中打印出日志。
致謝:感謝您的耐心閱讀!
新聞熱點(diǎn)
疑難解答
圖片精選