2012-12-18 74 views
8

我使用log4j 1.2.16RollingFileAppender,当日志文件达到一定大小时,它会滚动日志文件。现在我想每天滚动日志文件,当他们达到一定的大小。因此每天会有一个或多个日志文件。按大小和时间滚动日志

例如,

myapp.log 
myapp-17.12.2013.log 
myapp-16.12.2012.log 
myapp-16.12.2012.1.log 
myapp-16.12.2012.2.log 

是否有现成的,货架附加器,这确实它已经?

+0

http://stackoverflow.com/questions/3823977/need-a-working-example -of-configurations-log4j-rollingfileappender-via-properties – Stefan

回答

8

确实有两个选项:

  1. 使用的logback其大小和时间触发策略:http://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedFNATP
  2. 有TimeAndSizeRollingAppender用于Log4J的从这里开始:http://www.simonsite.org.uk/

请记住,这两个选项使用文件重命名。如果有另一个脚本自动移动这些文件,请仔细考虑这一点。当两个进程处理相同的文件时,文件重命名是有风险的。

我的建议是直接写入模式中的不可变日志文件名:myapp- {dd.MM.yyyy}。{X} .log。这样“滚动”就是关闭一个文件并打开一个新文件。没有重命名。没有后台线程。

+0

它是workrd。非常感谢。 –

3

快速回答是“否”。看看log4j的javadoc:https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/FileAppender.html

只有两个开箱即用的文件appender:DailyRollingFileAppender和RollingFileAppender(第一个不推荐,因为它有同步问题)。

为了实现你想要的,你应该创建你自己的appender,扩展RollingFileAppender并修改它以在日期发生变化时滚动文件。修改将是方法:

protected void subAppend(LoggingEvent event) 

这里你可以看到它的来源:http://www.docjar.com/html/api/org/apache/log4j/RollingFileAppender.java.html(线274)。

你只需要复制和粘贴代码,并更改如果调用rollOver以满足您的需求。

2

下面配置XML将做的工作: JAR要求:log4j的,滚动的appender-20150607-2059

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configuration debug="true" 
    xmlns:log4j='http://jakarta.apache.org/log4j/'> 
    <appender name="file" 
     class="uk.org.simonsite.log4j.appender.TimeAndSizeRollingAppender"> 
     <param name="File" value="D:\\App.log" /> 
     <param name="Threshold" value="DEBUG" /> 
     <param name="DatePattern" value=".yyyy-MM-dd" /> 
     <param name="MaxFileSize" value="1KB" /> 
     <param name="MaxRollFileCount" value="100" /> 
     <param name="ScavengeInterval" value="30000" /> 
     <param name="BufferedIO" value="false" /> 
     <param name="CompressionAlgorithm" value="GZ" /> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %-23d{ISO8601} [%t] %x: %c{1} - %m%n" /> 
     </layout> 
    </appender> 

    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="file" /> 
    </root> 

</log4j:configuration> 
相关问题