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

news/2024/7/7 15:06:14

使用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


http://www.niftyadmin.cn/n/3157423.html

相关文章

浅谈FTP和SFTP的区别

一、适用场景 我们平时习惯了使用ftp来上传下载文件&#xff0c;尤其是很多Linux环境下&#xff0c;我们一般都会通过第三方的SSH工具连接到Linux&#xff0c;但是当我们需要传输文件到Linux服务器当中&#xff0c;很多人习惯用ftp来传输&#xff0c;其实Linux默认是不提供ftp的…

《Docker生产环境实践指南》——1.2 从开发环境到生产环境

本节书摘来自异步社区《Docker生产环境实践指南》一书中的第1章&#xff0c;第1.2节&#xff0c;作者&#xff1a; 【美】Joe Johnston&#xff08;乔•约翰斯顿&#xff09;著&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 1.2 从开发环境到生产环境 本书着…

SFTP是什么?与FTP之间有什么区别

什么是SFTP&#xff1f; SFTP是一种安全的文件传输协议&#xff0c;一种通过网络传输文件的安全方法&#xff1b;它确保使用私有和安全的数据流来安全地传输数据。 SFTP要求客户端用户必须由服务器进行身份验证&#xff0c;并且数据传输必须通过安全通道&#xff08;SSH&…

ORACLE-行转列

CreateTime--2017年6月1日16:17:56Author:Marydon 行转列的两种方法 参考链接&#xff1a; http://www.2cto.com/database/201501/367164.html   http://www.oracle-developer.net/display.php?id506 示例一&#xff1a; 测试数据源 第一步&#xff1a;建表 CREATE TABLE DE…

Hibernate 集成 Ehcache 开启二级缓存

一、将 Ehcache.xml 放到 classpath 下 <?xml version"1.0" encoding"UTF-8"?> <ehcache><!--磁盘存储&#xff1a;用来指定缓存在磁盘上的存储目录。可以使用JavaVM环境变量(user.home, user.dir, java.io.tmpdir)--><diskStore p…

7-07. PAT排名汇总(25) (结构体 ZJU_PAT)

题目链接&#xff1a;http://www.patest.cn/contests/ds/7-07 编程能力測试&#xff08;Programming Ability Test&#xff0c;简称PAT&#xff09;是浙江大学计算机科学与技术学院主办的专业技术认证考试&#xff08;网址http://pat.zju.edu.cn/&#xff09;。每次考试会在若干…

使用有序GUID:提升其在各数据库中作为主键时的性能

原文出处&#xff1a;https://www.codeproject.com/articles/388157/guids-as-fast-primary-keys-under-multiple-database &#xff0c;避免今后忘记了再去阅读原英文。【】是感觉理解有问题的地方 正确的使用有序GUID在大部分数据库中可以获得和 整型作为主键 时相媲美的性能…

普及下github上的搜索使用技巧

GitHub 作为程序员聚集地的最大平台&#xff0c;是无数程序员每天必须使用和寻找资料的开源项目平台&#xff0c;只有熟练掌握了搜索技巧&#xff0c;才能高效率的在 GitHub 上找到优质的资源。 先介绍一组搜索技巧&#xff0c;如下&#xff1a; 比如&#xff1a;如果按开发者…