Log4j是Apache基金會的一個項目,它能為Java開發著提供功能強大使用方便的各種日志處理.當然它的版本不限于Java,還有C/C++等主流語言.我覺得它就象一把非常實用的鋒利小刀,讓我們的寫程序時更加如魚得水.
Log4j輸出的信息分如下幾類:ALL,DEBUG,INFO,ERROR,FATAL,級別從低到高,輸出的內容是從多到少.從字面意思即可看出大概,ALL指輸出所有信息;DEBUG指調試信息;INFO指一般信息;ERROR指錯誤信息;FATAL指致命的錯誤信息。
輸出的信息級別和內容我們可以在程序里面設置,但缺點就不夠靈活,并且無法在程序運行期間進行參數調整。通過XML或Property配置文件可以在外部控制Logger的輸出,原理都一樣的,只是表現形式不一樣,看個人的習慣了。下面主要講一下如何使用Property文件來靈活配置Log4j的輸出。
在Log4j中你可以讓信息輸出到控制臺(Console)、文件、遠程數據數等中的其中一個或多個當中。
首先我們要先聲明信息輸出的級別,并且 為了能把信息輸出到指定的目的地,我們要指定輸出方案,如下所示:
log4j.rootLogger = DEBUG, A1,A4
DEBUG為輸出信息的級別,A1,A4分別為輸出方案的名稱,下面我們來定義方案的具體參數。
指定該輸出方案的信息輸出目的地為控制臺:
log4j.appender.A1 = org.apache.log4j.ConsoleAppender
設定輸出的布局為模式布局:
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
指定模式的具體參數:
log4j.appender.A1.layout.ConversionPattern =[%d{HH:mm:ss}] [%t] %-5p - %m %n
每個參數前要加%來說明,其中:
%d:日期(date),如:yyyy-MM-dd,yyyy-MM-dd HH:mm:ss等
%t:線程名稱(Thread)
%-5p:信息優先級(Priority),寬度為5,左對齊。如DEBUG,FATAL等
%m:輸出信息(Message)
%n:回車換行
還有其它幾個象%c,%C,%F等
上面的方案A1指的是把信息輸出到控制臺,并且輸出的格式按指定的格式輸出。
我們還可以指定把信息輸出到文件當中,如下為普通文件輸出方案:
log4j.appender.A2 = org.apache.log4j.RollingFileAppender
log4j.appender.A2.File = logs\\test.log
log4j.appender.A2.MaxFileSize = 1MB
log4j.appender.A2.MaxBackupIndex = 3
log4j.appender.A2.layout = org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern =[%d] %-4r [%t] %-5p %c %x - %m %n
輸出指定的文件test.log當中,并且指定該文件最大不超過1MB,超過之后將清除后再寫入。當然也可以直接用FileAppender,不進行Rolling,那么所以的日志信息都將追加到原信息的后面。MaxBackupIndex指的是最大備份數目。以上面文件為例,當test.log到達1MB,則它直接被修改成test.log.1,如果這個文件已存在,則修改為test.log.2,直到MaxBackupIndex。新的日志信息,將重新生成文件test.log。當下一次達到1MB時,此時test.log.1,test.log.2,test.log.3都已存在,則直接把test.log.3刪除,把test.log修改成test.log.3。
把信息輸出到遠程數據庫當中:
# 定義A3輸出到數據庫
log4j.appender.A3 = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A3.BufferSize = 40
log4j.appender.A3.Driver = sun.jdbc.odbc.JdbcOdbcDriver
log4j.appender.A3.URL = jdbc:ODBC:driver={Microsoft Access Driver (*.mdb)};DBQ=MobileDB.mdb
log4j.appender.A3.User =
log4j.appender.A3.Password =
log4j.appender.A3.layout = org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern = INSERT INTO log4j(createDate, thread, priority, category, message) values('%d', '%t', '%-5p', '%c', '%m')
指定輸出方案為JDBCAppender,即能過JDBC把日志自動寫入到遠程數據庫當中。BufferSize指定緩沖區的大小,當輸出內容達到緩沖區的大小時,就把數據寫入數據庫一次。下面的參數依次為指暄數據庫驅動名稱、數據庫URL地址、數據庫登錄用戶名和密碼,模式布局和Select語句。
我們也可以把信息輸出到HTML文件當中,并且是按時間段自動生成文件,比如,每隔一個小時或一天、半天生成一個HTML文件:
log4j.appender.A4 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.A4.File = logs\\log.html
log4j.appender.A4.DatePattern='.'yyyy-MM-dd-HH'.html'
log4j.appender.A4.layout = org.apache.log4j.HTMLLayout
第一個參數為指定輸出方案為按日期滾動的文件方案。第二個參數指定文件名,第三個指定日期模式,最后一個指定布局為HTML布局。上面的設置會每隔一個小時產生一個HTML文件名,文件名為:log.html.2006-03-24-08.html的樣子。
完整的配置文件log4j.properties如下:
log4j.rootLogger = DEBUG, A1,A4
log4j.appender.A1 = org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern =[%d{HH:mm:ss}] [%t] %-5p - %m %n
log4j.appender.A2 = org.apache.log4j.RollingFileAppender
log4j.appender.A2.File = logs\\test.log
log4j.appender.A2.MaxFileSize = 1KB
log4j.appender.A2.MaxBackupIndex = 3
log4j.appender.A2.layout = org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern =[%d] %-4r [%t] %-5p %c %x - %m %n
#11區 定義A3輸出到數據庫
log4j.appender.A3 = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A3.BufferSize = 40
log4j.appender.A3.Driver = sun.jdbc.odbc.JdbcOdbcDriver
log4j.appender.A3.URL = jdbc:ODBC:driver={Microsoft Access Driver (*.mdb)};DBQ=MobileDB.mdb
log4j.appender.A3.User =
log4j.appender.A3.Password =
log4j.appender.A3.layout = org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern = INSERT INTO log4j(createDate, thread, priority, category, message) values('%d', '%t', '%-5p', '%c', '%m')
log4j.appender.A4 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.A4.File = logs\\log.html
log4j.appender.A4.DatePattern='.'yyyy-MM-dd-HH'.html'
log4j.appender.A4.layout = org.apache.log4j.HTMLLayout
在程序里面只需聲明使用Property配置文件來控制輸出就行了,如下所示:
static Logger logger = Logger.getLogger(DHMain.class);
public static void main(String[] args) {
PropertyConfigurator.configure("conf\\log4j.properties");
logger.debug("啟動..." );
}
有了Log4j,我們完全可以拋棄System.out了,用它吃力又不討好,何苦呢?
ExtJS教程-
Hibernate教程-
Struts2 教程-
Lucene教程