需要记录程序运行中的各种状态和异常信息,分别保存在Running.log和Error.log中,发现用LOG4J就能够轻松实现,故记录实现过程。

  首先,新建用于测试的Java工程,下载并添加JAR包,略过不表。

  然后,在SRC目录下新建log4j.properties文件,对log记录器进行配置,全文如下:

  1. #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",而一个记录器只能有一个优先级,因此这里会体现出多态性。


测试代码如下:

  1. import org.apache.log4j.Logger; 
  2.  
  3. public class LogTest  
  4.     public static void main(String[] args)  
  5.     { 
  6.         Logger infologger = Logger.getLogger("statusInfo"); 
  7.         Logger errlogger = Logger.getLogger("errInfo"); 
  8.         infologger.info("info"); 
  9.         errlogger.error("error");                
  10.     } 

控制台输出:

[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能够轻易实现程序中的日志记录需求,只是配置过程中子记录器对于优先级和输出路径的继承方式有一点点不同,需要注意。