在log4j中使用FileNamePattern,RollingFileAppender

时间:2010-12-01 12:38:52

标签: java logging log4j

我有一个名为app.log的日志文件。当它翻身时(我将其设置为每分钟仅用于测试目的),我希望将其重命名为app-YYYY-MM-dd_HH-mm.log,但它不起作用。以下是我的log4j设置:

log4j.appender.myLog=org.apache.log4j.RollingFileAppender
log4j.appender.myLog.rollingPolicy=TimeBasedRollingPolicy
log4j.appender.myLog.File=logs/app.log
log4j.appender.myLog.rollingPolicy.FileNamePattern=logs/app-%d{yyyy-MM-dd_HH-mm}.log
log4j.appender.myLog.Append=true
log4j.appender.myLog.layout=org.apache.log4j.PatternLayout
log4j.appender.myLog.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n

有谁知道这是什么问题?在翻转期间,它只是将文件重命名为app.log.1

6 个答案:

答案 0 :(得分:3)

我假设你正在使用 log4j。版本1.2.16是最新版本。其源代码中不存在rollingPolicy;仅在基于xml的配置的log4j.dtd文件中。

获得您想要的工作的唯一方法是下载Apache extras companion for log4j


最后,如果您不想使用附加功能,可以使用以下方法解决:

org.apache.log4j.DailyRollingFileAppender

此路径的减少是您的日志文件不会被gzip压缩。

答案 1 :(得分:3)

根据log4j wiki

  

请注意,TimeBasedRollingPolicy可以   只能用xml配置,而不是   log4j.properties

The API没有提到这一点,但也许这就是问题所在?

答案 2 :(得分:3)

下载log4j extras jar文件并将其放入lib文件夹。 同时添加rollingPolicy标记a:

<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
    <param name="FileNamePattern" 
       value="D:/Apps/Enterprise_domain/diagnostics/logs/diagnostics.% d{yyyy-MM-dd_HH-mm}.log"/>
</rollingPolicy>

答案 3 :(得分:1)

请检查您是否已包含apache-log4j-extras.jar并使用log4j-1.2.16.jar或至少高于2.17的版本。 这里是可以使用的示例log4j.properties。

    #Worked with 2.17 version
    #make log files rotate every minute or hour and zip old rotated logs
    log4j.rootLogger=INFO, loggerId
    log4j.appender.loggerId=org.apache.log4j.rolling.RollingFileAppender
    log4j.appender.loggerId.rollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
    log4j.appender.loggerId.rollingPolicy.ActiveFileName=worker.log
    log4j.appender.loggerId.rollingPolicy.FileNamePattern=worker-.%d{yyyyMMdd-HHmm}.log.gz
    log4j.appender.loggerId.layout=org.apache.log4j.PatternLayout
    log4j.appender.loggerId.layout.ConversionPattern=%d [%t] %-5p (%F:%L) - %m%n

有关属性的详细信息,请查看here

答案 4 :(得分:0)

尝试从logs/.File中删除.FileNamePattern。我正在阅读代码,它看起来应该可行,但可能值得减少问题。

https://svn.apache.org/repos/asf/logging/log4j/companions/extras/trunk/src/main/java/org/apache/log4j/rolling/TimeBasedRollingPolicy.java

答案 5 :(得分:0)

System.out.println("Loggers initiallization process started..");
 if(objApploger == null){
     objApploger = new AppLogger();
     String loglevel="ERROR";
     String logPath="E:\\Examples\\applicationLogs";
     String logMaxSize="50000";//in kbs
     int nmaxbackupIndex=20;
     String conversionPattern="%d{yyyy-MM-dd HH:mm:ss:SSS} %-5p  :: %m%n";       
     RollingFileAppender RFAppender= null;
     RFLog =Logger.getLogger("Log");
     RFLog.setLevel(Level.toLevel(loglevel));       
     Calendar cal= Calendar.getInstance();       
     String timeFrame=cal.get(5)+"_"+(cal.get(2)+1)+"_"+cal.get(1);
     logPath=logPath+"TestLog_"+timeFrame+".log";
     RFAppender = new RollingFileAppender(new PatternLayout(conversionPattern),logPath);
     RFAppender.setMaxBackupIndex(nmaxbackupIndex);
     RFAppender.setMaxFileSize(logMaxSize);
     RFLog.addAppender(RFAppender);
     System.out.println("Loggers initiallization process completed..");      
 }