以前都是把所有日志都輸出到一個(gè)文件下面,今天有個(gè)同事問(wèn)想把某個(gè)包下的日志輸出到
指定的地方,于是就在網(wǎng)上查了一些資料,總結(jié)一下,以免以后用到。
一、log4j是什么?
Log4j是一個(gè)開(kāi)源的日志記錄組件,其產(chǎn)品已經(jīng)相當(dāng)?shù)某墒欤沂褂梅浅5膹V泛。在工程中以易用,方便等代替了System.out 等打印語(yǔ)句。
Log4j的目標(biāo)是:它允許開(kāi)發(fā)人員以任意的精細(xì)程度控制哪些日志說(shuō)明被輸出。通過(guò)使用外部的配置文件,可以在運(yùn)行時(shí)配置它。
Log4j的具體在http://logging.apache.org/log4j/找到它(有使用的文檔說(shuō)明)。另外,log4j已經(jīng)被轉(zhuǎn)換成C, C++, C#, Perl, Python, Ruby, 和Eiffel 語(yǔ)言。
二、通常我們建立一個(gè)
log4j.PRoperties文件放在src下,編譯之后就生成在../web-inf/class/
當(dāng)然也可以放到其它任何目錄,只要該目錄被包含到類路徑中即可,中定位這個(gè)文件,并讀入這個(gè)文件完成的配置。這個(gè)配置文件告訴Log4J以什么樣的格式、把什么樣的信息、輸出到什么地方。
Log4j有三個(gè)主要的組件:Loggers(記錄器),Appenders(輸出源)和Layouts(布局),這里可簡(jiǎn)單理解為日志類別,日志要輸出的地方和日志以何種形式輸出。
綜合使用這三個(gè)組件可以輕松的記錄信息的類型和級(jí)別,并可以在運(yùn)行時(shí)控制日志輸出的樣式和位置。
下面對(duì)三個(gè)組件分別進(jìn)行說(shuō)明:
1、Loggers
Loggers組件在此系統(tǒng)中被分為五個(gè)級(jí)別:DEBUG、INFO、WARN、ERROR和FATAL。這五個(gè)級(jí)別是有順序的,DEBUG Log4j有一個(gè)規(guī)則:
假設(shè)Loggers級(jí)別為P,如果在Loggers中發(fā)生了一個(gè)級(jí)別Q比P高,則可以啟動(dòng),否則屏蔽掉。
假設(shè)你定義的級(jí)別是info,那么error和warn的日志可以顯示而比他低的debug信息就不顯示了。
其語(yǔ)法表示為: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ā)送到任意指定的地方)
配置時(shí)使用方式為:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.option = valueN
這樣就為日志的輸出提供了相當(dāng)大的便利。
3、Layouts
有時(shí)用戶希望根據(jù)自己的喜好格式化自己的日志輸出。
Log4j可以在Appenders的后面附加Layouts來(lái)完成這個(gè)功能。
Layouts提供了四種日志輸出樣式,如根據(jù)HTML樣式、自由指定樣式、包含日志級(jí)別與信息的樣式和包含日志時(shí)間、線程、類別等信息的樣式等等。
其語(yǔ)法表示為:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以靈活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的級(jí)別和信息字符串)
org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間、線程、類別等等信息)
配置時(shí)使用方式為:
log4j.appender.appenderName.layout =fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.option = valueN
Log4J采用類似C語(yǔ)言中的printf函數(shù)的打印格式格式化日志信息,打印參數(shù)如下:
%m 輸出代碼中指定的消息
%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)為“/r/n”,Unix平臺(tái)為“/n”
%d 輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似: 2002年10月18日 22:10:28,921
%l 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。舉例:Testlog4.main(TestLog4.java:10)
4 . Log4j的配置
以上是從原理方面說(shuō)明Log4j的使用方法,在具體Java編程使用Log4j可以參照以下示例:
1、建立Logger實(shí)例:
語(yǔ)法表示:public static Logger getLogger( String name)
實(shí)際使用:static Logger logger = Logger.getLogger(ServerWithLog4j.class.getName ())
2、讀取配置文件:
獲得了Logger的實(shí)例之后,接下來(lái)將配置Log4j使用環(huán)境,語(yǔ)法表示:
或者直接放在src下把log4j.properties文件BasicConfigurator.configure():自動(dòng)快速地使用缺省Log4j環(huán)境。
PropertyConfigurator.configure(String configFilename):讀取使用Java的特性文件編寫的配置文件。
DOMConfigurator.configure(String filename):讀取xml形式的配置文件。
實(shí)際使用:PropertyConfigurator.configure("ServerWithLog4j.properties");
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注