Log4j簡(jiǎn)介: Log4j是用于管理信息日志的插件工具,它是Apache的一個(gè)開源項(xiàng)目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺(tái)、文件、GUI組件,甚至是套接口服務(wù)器、NT的事件記錄器、UNIX、Syslog守護(hù)進(jìn)程、Email郵箱等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級(jí)別,我們能夠更加細(xì)致地控制日志【學(xué)Java,到凱哥學(xué)堂kaige123.com】的生成過程。最令人感興趣的就是,這些只需要通過一個(gè)配置文件來靈活地進(jìn)行配置,而不需要修改工程的代碼,Log4j因?yàn)槭窃趈ava中使用的,所以lo4j就是log for Java(java的日志)的簡(jiǎn)寫。
Log4j下載: Log4j可以在官網(wǎng)下載,然后將jar包導(dǎo)入到工程就可以使用了。 官網(wǎng)下載地址:http://logging.apache.org/log4j/1.2/download.html

log4j可以直接在Maven工程中通過pom文件配置下載,配置語法:
log4jlog4j1.2.17
Lo4j設(shè)計(jì)結(jié)構(gòu): Lo4j中最主要的四個(gè)結(jié)構(gòu):Logger、Appender、Layout、日志級(jí)別,Lo4j中最高父類是Logger類,然后就是Appender類,這個(gè)類是用來設(shè)置日志信息的輸出方向的,使用Appender可以指定日信息輸出到控制臺(tái)、文件、郵箱等等。 Appender常用的日志信息輸出方向:
org.apache.log4j.ConsoleAppender(控制臺(tái))
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個(gè)日志文件)
org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時(shí)候產(chǎn)生一個(gè)新的文件)
org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)
接著就是Layout,Layout是用于布局日志信息的輸出格式的,常用的Layout布局: org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以靈活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的級(jí)別和信息字符串) org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間、線程、類別等等信息)
最后是日志級(jí)別,日志級(jí)別簡(jiǎn)單地說就是根據(jù)你代碼中輸出日志信息的嚴(yán)重程度來劃分一個(gè)級(jí)別,常用的日志級(jí)別有以下幾種:
DEBUG?指定細(xì)粒度信息事件是最有用的應(yīng)用程序調(diào)試 INFO? 指定能夠突出在粗粒度級(jí)別的應(yīng)用程序運(yùn)行情況的信息的消息
WARN? 指定具有潛在危害的情況
ERROR? 錯(cuò)誤事件可能仍然允許應(yīng)用程序繼續(xù)運(yùn)行 FATAL? 指定非常嚴(yán)重的錯(cuò)誤事件,這可能導(dǎo)致應(yīng)用程序中止
以上寫的級(jí)別是做了一個(gè)排序的,為什么說是做了排序呢?是因?yàn)槔缒阒付―EBUG級(jí)別的話,包括DEBUG以內(nèi)的以下四個(gè)級(jí)別的信息都會(huì)輸出,指定INFO級(jí)別則只輸出包括INFO內(nèi)的以下三個(gè)級(jí)別的信息都會(huì)輸出,然后以此類推的一個(gè)順序。 例如:
DEBUG>>>DEBUG,INFO,WARN,ERROR,FATAL
INFO>>>INFO,WARN,ERROR,FATAL
WARN>>>WARN,ERROR,FATAL
ERROR>>>ERROR,FATAL
FATAL>>>FATAL
配置Lo4j: 將Log4j的jar下載到工程后就可以開始進(jìn)行l(wèi)og4j的配置了,首先創(chuàng)建log4j的屬性文件,這個(gè)文件對(duì)于log4j來說相當(dāng)于Maven的pom文件,與日志相關(guān)的東西都在這個(gè)文件里進(jìn)行配置: Maven工程:

普通工程:

編寫一個(gè)類,用Logger類的對(duì)象調(diào)用一些方法來輸出日志信息:

配置屬性文件:

配置屬性文件意義詳解:

第二行輸出方向需要.layout的原因是因?yàn)閟etLayout方法:

那行亂碼般地自定義輸出格式表示的意義如下:
%m輸出的文本內(nèi)容%p輸出優(yōu)先級(jí),即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL%r輸出自應(yīng)用啟動(dòng)到輸出該log信息耗費(fèi)的毫秒數(shù)%c輸出所屬的類目,通常就是所在類的全名%t輸出產(chǎn)生該日志事件的線程名%n輸出一個(gè)回車換行符,Windows平臺(tái)為“rn”,Unix平臺(tái)為“n”%d輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 :10:28,921%l輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。%xUsed to output the NDC (nested diagnostic context) associated with the thread that generated the logging event%XUsed to output the MDC (mapped diagnostic context) associated with the thread that generated the logging eventforspecified key
運(yùn)行結(jié)果:

選擇輸出日志的級(jí)別:

運(yùn)行結(jié)果:

選擇某個(gè)包的日志信息輸出,在log4j.logger 后面加入一個(gè)包名就可以了:

運(yùn)行結(jié)果:

還可以具體到選擇某個(gè)類的日志信息輸出:

運(yùn)行結(jié)果:

還可以在某個(gè)類里自定義別名,然后配置到屬性文件后就會(huì)輸出這個(gè)類的日志信息: 代碼示例:

配置屬性文件:

運(yùn)行結(jié)果:

日志方案可以配置多個(gè),只需要名稱不同即可:

運(yùn)行結(jié)果:

在Maven工程或者普通工程將工程打包成jar包時(shí),注意要去除log4j日志的屬性文件,這里以Maven工程做示例,普通工程移除文件即可,Maven工程需要在生命周期中插入一個(gè)插件來幫助去除,這樣就不需要手動(dòng)移除了: 配置語法:
org.apache.maven.pluginsmaven-jar-plugin2.4**/*.properties
運(yùn)行Maven的打包命令可以看到target文件夾和jar包里都沒有這個(gè)log4j的屬性文件:


總結(jié):
