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