需要記錄程序運行中的各種狀態和異常信息,分別保存在Running.log和Error.log中,發現用LOG4J就能夠輕鬆實現,故記錄實現過程。
首先,新建用於測試的Java工程,下載並添加JAR包,略過不表。
然後,在SRC目錄下新建log4j.properties文件,對log記錄器進行配置,全文如下:
- #define the rootLogger,define its priority=info,indicate its output path is "console" log4j.rootCategory = info, console #configure the "console" #path log4j.appender.console = org.apache.log4j.ConsoleAppender #define the output layout log4j.appender.console.layout = org.apache.log4j.PatternLayout #define the output layout, %d = date, %m = logInfo, %n = /n log4j.appender.console.layout.ConversionPattern = [%d] %m %n #define 2 childLogger,note that childLogger will inherit the rootLogger('s priority and outputPath) #"statusInfo" records the program's working status #"statusInfo" has 2 outputPath:console and logFile ,and priority is info log4j.logger.statusInfo = ,logFile log4j.appender.logFile = org.apache.log4j.DailyRollingFileAppender log4j.appender.logFile.File = Running.log log4j.appender.logFile.layout = org.apache.log4j.PatternLayout log4j.appender.logFile.layout.ConversionPattern = [%d] %m %n #"errInfo" records the program's error info log4j.logger.errInfo = error, errFile log4j.appender.errFile = org.apache.log4j.FileAppender log4j.appender.errFile.File = Error.log log4j.appender.errFile.layout = org.apache.log4j.PatternLayout log4j.appender.errFile.layout.ConversionPattern = [%d] %m %n ###################################END##################################
由於程序需要在linux下運行,而中文亂碼一直讓人很糾結,因此註釋部分索性用英文寫了。
第3行,定義一個根記錄器,它的優先級爲"info",輸出路徑爲console。
考慮到有可能需要配置很多不同的記錄器,log4j採用了繼承的機制,而這個"rootCategory"就相當於基類啦。
關於優先級以及下面輸出格式中的具體參數,百度百科上有詳細解釋,不表。
第6,8,10行,對console的具體路徑、輸出格式進行了配置。這裏指定爲輸出時間、log內容並換行。
第12行的註釋已經解釋了,下面將配置2個子記錄器。
第16行,未指定"statusInfo"的優先級,則繼承爲"info".請注意,輸出路徑會強制從根記錄器繼承,因此它會有兩個路徑:console以及statusFile。
第23行,已經指定優先級爲"error",而一個記錄器只能有一個優先級,因此這裏會體現出多態性。
測試代碼如下:
- import org.apache.log4j.Logger;
- public class LogTest
- {
- public static void main(String[] args)
- {
- Logger infologger = Logger.getLogger("statusInfo");
- Logger errlogger = Logger.getLogger("errInfo");
- infologger.info("info");
- errlogger.error("error");
- }
- }
控制檯輸出:
[2012-03-16 17:11:57,796] info
[2012-03-16 17:11:57,812] error
Error.log內容:[2012-03-16 17:11:57,812] error
Running.log內容:[2012-03-16 17:11:57,796] info
總結:利用LOG4J能夠輕易實現程序中的日誌記錄需求,只是配置過程中子記錄器對於優先級和輸出路徑的繼承方式有一點點不同,需要注意。