`
flysnowxf
  • 浏览: 572741 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
阅读更多
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 version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
     <!-- appender -->
     <!-- STDOUT -->
     <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
          <layout class="org.apache.log4j.PatternLayout">
               <param name="ConversionPattern" value="%d %p [%c] - %m%n" />
          </layout>
     </appender>

     <!-- FILE -->
     <appender name="FILE"
          class="org.apache.log4j.rolling.RollingFileAppender">
          <rollingPolicy
               class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
               <param name="FileNamePattern"
                    value="d:/logs/file.%d{yyyy-MM-dd-HH}" />
          </rollingPolicy>
          <layout class="org.apache.log4j.PatternLayout">
               <param name="ConversionPattern"
                    value="%m%n" />
          </layout>
     </appender>
    
     <logger name="view">
          <level value="info" />
          <appender-ref ref="FILE" />
     </logger>

     <root>
          <level value="info" />
          <appender-ref ref="STDOUT" />
     </root>
</log4j:configuration>

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

测试用例:
public static void main(String[] args) {
           Logger logger = Logger.getLogger("view");
           logger.info("test");
}


TimeBasedRollingPolicy的使用可参考:
http://logging.apache.org/log4j/companions/extras/apidocs/org/apache/log4j/rolling/TimeBasedRollingPolicy.html
分享到:
评论
4 楼 flyzsd 2011-05-09  
用 SLF4J + LOGBACK
3 楼 flysnowxf 2011-05-06  
logback实现以上需求的配置:
<timestamp key="byHour" datePattern="yyyy-MM-dd-HH"/> 
<appender name="FILE"
		class="ch.qos.logback.core.FileAppender">
		<File>d:/logs/file.${byHour}</File>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<Pattern>
				%msg%n
			</Pattern>
		</layout>
	</appender>

	<logger name="view">
		<level value="info" />
		<appender-ref ref="FILE" />
	</logger>

不需要使用rolling包,直接产生带时间戳的日志文件。
2 楼 flysnowxf 2011-05-06  
simplechinese 写道
logback飘过

看了下logback,它把这个功能集成进去了。那哥们老折腾了,弄了slf4j,又新开一个logback。
1 楼 simplechinese 2011-05-05  
logback飘过

相关推荐

    Log4j日志包

    log4j.rootLogger=debug,CONSOLE,testfile,A1,MAIL ################### # Console Appender ################### log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Target=...

    log4j中配置日志文件相对路径方法分析

    log4j中配置日志文件相对路径方法分析 方法一、 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log 其中“${...

    log4j日志驱动包

    log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender log4j.appender.ROLLING_FILE.Threshold=ERROR log4j.appender.ROLLING_FILE.File=rolling.log //文件位置,也可以用变量${java.home}、rolling....

    Log4j日志管理系统简单使用说明

     org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  org.apache.log4j.WriterAppender(将日志信息...

    log4j-1.2.9

    设置log4j的根目录,值为 日志等级(DEBUG,INFO,WARN,ERROR,FATAL) , 输出目标名称 log4j.rootLogger=DEBUG,A1 设置输出方式,常用的有: ConsoleAppender 在控制器中输出信息 RollingFileApperder 在文件中输出...

    log4j-1.2.14

    设置log4j的根目录,值为 日志等级(DEBUG,INFO,WARN,ERROR,FATAL) , 输出目标名称 log4j.rootLogger=DEBUG,A1 设置输出方式,常用的有: ConsoleAppender 在控制器中输出信息 RollingFileApperder 在文件中输出...

    Log4j 学习笔记.doc

    Log4j 学习笔记. 1. Log4j的类图 2. Logger:日志写出器 1. Logger的输出方法 2. Logger的命名规则 ...5. 我自己的一个使用xml文件配置log4j环境的很简单的例子 6. Log4j的编码习惯 参考资料

    保证看完就用log4j

    log4j.appender.llg=org.apache.log4j.RollingFileAppender #文件位置 #配置llg这个日志文件的位置 log4j.appender.llg.File=f:/llg/log.log #挂上 #。。。没想机密,都配置好了,还要有一个确认 log4j.appender.llg...

    Log4Cpp日志输出至文件组件最佳实践

    记录了C++中使用Log4Cpp的整体使用源码,具体可参考:http://blog.csdn.net/jptiancai/article/details/23678073

    log4net-log日志文件示例程序.docx

    如何用Log4net 生成Log日志记录文档。内家详细的注释和说明,解释每一个指令的用法。 示例: &lt;!--保存到文件,还可以保存到数据库等--&gt; &lt;appender name="ErrorAppender" type="log4...

    log4j 文件输出

    ====================== 目录不可以创建,但是log文件是自动创建得呢 log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=C:\bea\user_projects\domain\log ==========================...

    Log4jToRollingFileAppender.zip

    本工程用于研究log4j日志输出目的地org.apache.log4j.RollingFileAppender的使用方法 本工程编码方式:UTF-8 本工程开发工具:MyEclipse

    解决docker日志挂载的问题

    关键看这里吧(Permission denied), 一直没有看正方,以为是配置日志文件 找不到有问题,下面是部分异常 10:35:09,498 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - openFile&#40;null,...

    log4net实例

    RollingFileAppender 将日志以回滚文件的形式写到文件中。 SmtpAppender 将日志写到邮件中。 - SmtpPickupDirAppender 将消息以文件的方式放入一个目录中,像IIS SMTP agent这样的SMTP代理就可以阅读或发送它们。...

    android按天记日志

    只实现了RollingFileAppender ,文件可以按指定大小 定量产生,但是常用的记录日志方法是 按天生产一个日志文件,所以就从官网上下了源码,简单的修改下,增加了对DailyRollingFileAppender 的支持,可以配置按天...

    基于log4cplus-1.2.0-rc5 版本自实现的一个appender(RollingAppender)

    同时兼具RollingFileAppender 和TimeBasedRollingFileAppender 转存文件的功能。也具备以当前日期作为目录存储日志文件。

    integration-log4j2:使用Ionic RollingFileAppender扩展保护log4j2输出

    Ionic Java SDK示例Web应用程序/ Log4j / Tomcat Ionic SDK提供了一个易于使用的Ionic Platform界面。 特别是,Ionic SDK公开了执行密钥管理和数据加密的功能。 该示例应用程序采用Web应用程序(webapp)的形式,...

    log4j详解与实战 - 企业应用

    log4j详解与实战 - 企业应用 Logger - 日志写出器,供程序员输出日志信息 Appender - 日志目的地,把格式化好的日志信息输出到指定的地方去 ConsoleAppender - 目的地为控制台的Appender FileAppender - 目的地...

    log4cpp源码完整解析

    完整分析了log4cpp的整体架构,详细介绍了log4cpp的这个重要组件的实现分析了log4cpp内部所使用的设计模式。介绍了log4cpp中的Category的完整实现细节,介绍了所有的Layout及其子类的具体实现。也详细介绍了比较常用...

    azkaban-3.38安装包(已编译)

    log4j.appender.server=org.apache.log4j.RollingFileAppender log4j.appender.server.layout=org.apache.log4j.PatternLayout log4j.appender.server.File=logs/azkaban-execserver.log log4j.appender.server....

Global site tag (gtag.js) - Google Analytics