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

来源:互联网 发布:小众软件app 编辑:程序博客网 时间:2024/06/02 23:36

使用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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 行车监控看不清楚车号怎么办? 1.5米的鱼缸要怎么办 被锤子砸到手了怎么办 家里地下污水管道堵塞怎么办 家里pvc灯罩变黄怎么办 欧普吸顶灯灯罩坏了怎么办 硬盘用久了变慢怎么办 地税申报工资人员弄错怎么办 买保险保单丢了怎么办 买保险的银行卡丢了怎么办 没学过JAVA入职怎么办 磨砂皮擦了鞋油怎么办 磨破皮伤口有沙子怎么办 工行信用卡被风险锁定了怎么办 超重被超限站查住以后怎么办 银行卡输入密码次数超限怎么办 信用卡密码错误次数超限怎么办 农行密码错误次数超限怎么办 剪力墙偏心受拉怎么办 韵达快递寄丢了怎么办 重要快递送丢了怎么办 快递员送货丢了怎么办 买的快递丢失了怎么办 申通把件弄丢了怎么办 淘宝快递送丢了怎么办 我的快递丢了怎么办 顺丰快递丢件怎么办 韵达快递不发货怎么办 发物流丢了怎么办啊 圆通快递寄丢了怎么办 中通快递弄丢了怎么办 中通快递寄丢了怎么办 中通快递丢了怎么办 物流没保价坏了怎么办 顺丰保值快递丢了怎么办 顺丰保价件丢失怎么办 公司购买货物对方没有发票怎么办 加工货物对方不取怎么办 物流发货发错了怎么办 货车拉的货丢了怎么办 壹米滴答丢货怎么办