浏览 3360 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-05-05
比如时间戳精确到小时,格式为.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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-05-05
logback飘过
|
|
返回顶楼 | |
发表时间:2011-05-06
simplechinese 写道 logback飘过
看了下logback,它把这个功能集成进去了。那哥们老折腾了,弄了slf4j,又新开一个logback。 |
|
返回顶楼 | |
发表时间: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包,直接产生带时间戳的日志文件。 |
|
返回顶楼 | |
发表时间:2011-05-09
用 SLF4J + LOGBACK
|
|
返回顶楼 | |