Java那些事之Log4j
上次跟大家分享了java使用berkeley db。這一次,再跟大家分享一個開源組件,大名鼎鼎的log4j。這里需要首先聲明一點,我在這里和大家分享的,都是我的個人實際經驗,只是把我知道的東西盡可能多的分享。但是對于技術本身,可能還有很多更深入更有意思的東西,是我沒有接觸到或者沒有研究的,如果各位對此有更深的研究,歡迎大家一起切磋補充。在這里先拜謝了~
下面進入正題,前一陣用了一下log4j,感覺還是挺不錯的,可以支持配置文件和程序代碼對log進行配置,靈活方便,也具有一定的擴展性,簡單介紹一下。
首先還是說一下獲取方式,去http://logging.apache.org/log4j/1.2/這個地址下載log4j的最新版本,然后添加到java項目中就可以了。
在介紹方法之前,首先對log4j的參數做一個總體的概述:
?
ERROR、WARN、INFO、DEBUG
ERROR 為嚴重錯誤 主要是程序的錯誤
WARN 為一般警告,比如session丟失
INFO 為一般要顯示的信息,比如登錄登出
DEBUG 為程序的調試信息
配置日志信息輸出目的地
log4j.appender.appenderName = fully.qualified.name.of.appender.class
1.org.apache.log4j.ConsoleAppender(控制臺)
2.org.apache.log4j.FileAppender(文件)
3.org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件)
4.org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
5.org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)
配置日志信息的格式
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),
2.org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
3.org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
4.org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)
控制臺選項
Threshold=DEBUG:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
Target=System.err:默認情況下是:System.out,指定輸出控制臺
FileAppender 選項
Threshold=DEBUF:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
RollingFileAppender 選項
Threshold=DEBUG:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
MaxFileSize=100KB: 后綴可以是KB, MB 或者是 GB. 在日志文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以產生的滾動文件的最大數。
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
日志信息格式中幾個符號所代表的含義:
?-X號: X信息輸出時左對齊;
?%p: 輸出日志信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL,
?%d: 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
?%r: 輸出自應用啟動到輸出該log信息耗費的毫秒數
?%c: 輸出日志信息所屬的類目,通常就是所在類的全名
?%t: 輸出產生該日志事件的線程名
?%l: 輸出日志事件的發生位置,相當于%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main (TestLog4.java:10)
?%x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。
?%%: 輸出一個"%"字符
?%F: 輸出日志消息產生時所在的文件名稱
?%L: 輸出代碼中的行號
?%m: 輸出代碼中指定的消息,產生的日志具體信息
?%n: 輸出一個回車換行符,Windows平臺為"\r\n",Unix平臺為"\n"輸出日志信息換行
?可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
?1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,默認的情況下右對齊。
?2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,"-"號指定左對齊。
?3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大于30的話,就會將左邊多出的字符截掉,但小于30的話也不會有空格。
?4)%20.30c:如果category的名稱小于20就補空格,并且右對齊,如果其名稱長于30字符,就從左邊較遠輸出的字符截掉。
?注 以上參數說明來自:http://blog.csdn.net/azheng270/archive/2008/03/12/2173430.aspx 有興趣的朋友可以直接去那里學習,還有更詳細的解釋。
?
?
使用方法如下,首先需要有一個log4j的配置文件,我們就取名為log4j.properties
log4j.appender.url_expand = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.url_expand.File = url_expand.log
log4j.appender.url_expand.layout = org.apache.log4j.PatternLayout
log4j.appender.url_expand.layout.ConversionPattern = %d?%p? [ %c ] ?-?%m%n
log4j.appender.url_expand.DatePattern = yyyy-MM-dd
log4j.logger.Downloader = DEBUG , ?downloader
log4j.appender.downloader = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.downloader.File = downloader.log
log4j.appender.downloader.layout = org.apache.log4j.PatternLayout
log4j.appender.downloader.layout.ConversionPattern = %d?%p? [ %c ] ?-?%m%n
log4j.appender.downloader.DatePattern = yyyy-MM-dd
?上面指定了log的各種信息,但是請注意,這里我把文件名注釋掉了。這是因為我需要動態指定文件名,因為有些程序可能并不是單機運行,而是很多機器一起運行,而最后又要把log放在一起,如果文件名都相同,就會出現新文件覆蓋舊文件的情況。而且文件之間還有混淆,因此我在文件名前打算加上機器的主機名,這樣既避免了剛才的問題,還可以一目了然日志的所有者是哪臺機器,一舉兩得啊。
要動態指定日志名稱,我目前的辦法是在程序中,修改配置文件

?這樣就可以實現效果了。大家快去試試吧~
?
另外,log4j還可以和郵件相結合,你可以指定當發生了什么級別的事件時,系統會自動向你發送郵件,這樣你可以及時知道錯誤的發生,第一時間去處理,提高工作效率。下面我們來看看怎么發郵件吧。
首先要下載兩個jar:activation.jar和mail.jar 具體地址我不記得了,大家去搜一下吧。應該有很多地方都可以下載的到。
?之后也是要把jar加到java工程中來,然后就可以進行配置了。不用寫代碼哦~
?配置如下,只需要再之前的配置文件的 log4j.logger.URL_Expand = DEBUG , ?url_expand這一行,添加MAIL,然后再后面加上MAIL的配置就行了
?
log4j.appender.url_expand = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.url_expand.File = url_expand.log
log4j.appender.url_expand.layout = org.apache.log4j.PatternLayout
log4j.appender.url_expand.layout.ConversionPattern = %d?%p? [ %c ] ?-?%m%n
log4j.appender.url_expand.DatePattern = yyyy-MM-dd
log4j.logger.Downloader = DEBUG , ?downloader , MAIL
log4j.appender.downloader = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.downloader.File = downloader.log
log4j.appender.downloader.layout = org.apache.log4j.PatternLayout
log4j.appender.downloader.layout.ConversionPattern = %d?%p? [ %c ] ?-?%m%n
log4j.appender.downloader.DatePattern = yyyy-MM-dd
log4j.appender.MAIL = org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold = FATAL
log4j.appender.MAIL.BufferSize = 1
log4j.appender.MAIL.SMTPHost = smtp .163 .com
log4j.appender.MAIL.SMTPDebug = false
log4j.appender.MAIL.Subject = Log4J?Message
log4j.appender.MAIL.SMTPUsername = username
log4j.appender.MAIL.SMTPPassword = password
log4j.appender.MAIL.From = email?address
log4j.appender.MAIL.To = your?email?address
log4j.appender.MAIL.layout = org.apache.log4j.PatternLayout?
log4j.appender.MAIL.layout.ConversionPattern = [ framework ] ?%d?-?%c?-%-4r? [ %t ] ?%-5p?%c?%x?-?%m%n
?其中,需要指定 Threshold也就是發郵件的級別,如果是info,則info以及error還有fatal都會發郵件。
?
還需要指定郵件服務器(163測試通過),發件地址,密碼,收件地址和信件格式等。這個大家自己去試試吧。
只要正常寫日志,如果級別超過或等于 Threshold中指定的級別,就會發送郵件,不用額外進行編碼。
:Java那些事之Log4j http://www.cnblogs.com/luchen927/archive/2011/06/30/2094091.htm
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
