[log4j]使用log4j扩展包的RollingFileAppender生成带时间戳的日志文件

使用log4j扩展包的RollingFileAppender生成带时间戳的日志文件

博客分类:  Java

log4jApacheXMLHTML 

DailyRollingFileAppender生成的文件是不带时间戳的,必须在某个时间点后,才对原来文件加上时间戳进行重命名。 
比如时间戳精确到小时,格式为.yyyy-MM-dd-HH,当前时间为2011-05-05的5点,那么日志为 
log 
时间变为6点之后(并且6点有日志访问),日志为 
log 
log.2011-05-05-05 

因为log4j是事件触发的,如果某段时间没有日志访问,即使时间点到了,也不会加上时间戳进行重命名。比如两天后才有日志访问,这时才产生log.2011-05-05-05这个文件。这样会造成日志统计中,统计不到这个文件。 

解决方法是,生成日志文件的时候就已经加上时间戳。比如5点时候的日志,就已经是log.2011-05-05-05。原log4j没有实现这个功能,需要自己继承FileAppender来实现一个Appender。我看了一下源码,可以参考DailyRollingFileAppender,修改一下它的构造函数和rollOver。自己没有去实验,不知道能不能成功。 

apache-log4j-extras是log4j的扩展包,其中TimeBasedRollingPolicy可以实现这个需求。 
需要的包: 
log4j-1.2.15.jar 
apache-log4j-extras-1.0.jar 
注意:log4j必须是1.2.15以上,14不行 

log4j配置文件不能使用properties,必须使用xml。配置可参考: 

Xml代码  收藏代码

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  
  3. <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>  
  4.      <!-- appender -->  
  5.      <!-- STDOUT -->  
  6.      <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">  
  7.           <layout class="org.apache.log4j.PatternLayout">  
  8.                <param name="ConversionPattern" value="%d %p [%c] - %m%n" />  
  9.           </layout>  
  10.      </appender>  
  11.   
  12.      <!-- FILE -->  
  13.      <appender name="FILE"  
  14.           class="org.apache.log4j.rolling.RollingFileAppender">  
  15.           <rollingPolicy  
  16.                class="org.apache.log4j.rolling.TimeBasedRollingPolicy">  
  17.                <param name="FileNamePattern"  
  18.                     value="d:/logs/file.%d{yyyy-MM-dd-HH}" />  
  19.           </rollingPolicy>  
  20.           <layout class="org.apache.log4j.PatternLayout">  
  21.                <param name="ConversionPattern"  
  22.                     value="%m%n" />  
  23.           </layout>  
  24.      </appender>  
  25.       
  26.      <logger name="view">  
  27.           <level value="info" />  
  28.           <appender-ref ref="FILE" />  
  29.      </logger>  
  30.   
  31.      <root>  
  32.           <level value="info" />  
  33.           <appender-ref ref="STDOUT" />  
  34.      </root>  
  35. </log4j:configuration>  


注意:org.apache.log4j.rolling.RollingFileAppender是rolling包下的,而不是原来的org.apache.log4j.RollingFileAppender 

测试用例: 

Java代码  收藏代码

  1. public static void main(String[] args) {  
  2.            Logger logger = Logger.getLogger("view");  
  3.            logger.info("test");  
  4. }  



TimeBasedRollingPolicy的使用可参考: 
http://logging.apache.org/log4j/companions/extras/apidocs/org/apache/log4j/rolling/TimeBasedRollingPolicy.html

猜你喜欢

转载自blog.csdn.net/suifeng629/article/details/93847726
今日推荐