Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用FileNamePattern,在log4j中滚动FileAppender_Java_Logging_Log4j - Fatal编程技术网

Java 使用FileNamePattern,在log4j中滚动FileAppender

Java 使用FileNamePattern,在log4j中滚动FileAppender,java,logging,log4j,Java,Logging,Log4j,我有一个名为app.log的日志文件。当它滚动时(我将其设置为每分钟一次,只是为了测试目的),我希望它被重命名为app-yyy-MM-dd_HH-MM.log,但它不工作。以下是我的log4j设置: log4j.appender.myLog=org.apache.log4j.RollingFileAppender log4j.appender.myLog.rollingPolicy=TimeBasedRollingPolicy log4j.appender.myLog.File=logs/app

我有一个名为app.log的日志文件。当它滚动时(我将其设置为每分钟一次,只是为了测试目的),我希望它被重命名为
app-yyy-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

尝试从
.file
.FileNamePattern
中删除
日志。我正在阅读代码,它看起来应该可以工作,但它可能值得减少问题

我假设您只使用log4j。版本1.2.16是最新的版本<代码>滚动策略
在其源代码中不存在;仅在基于xml的配置的
log4j.dtd
文件中

获得想要的工作的唯一方法是下载


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

此路径的缺点是不会对日志文件进行gzip处理。

根据:

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


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

下载
log4j
extrasjar文件并将其放入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>

请检查您是否包含并使用了或至少超过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

有关属性的更多详细信息,请检查

这是很久以前的事了,当在属性配置器中使用基于时间的滚动策略时,log4j-1.2.16.jar或更高版本以及log4j extras包可以正常工作。我最近制作了一个补丁,允许在使用此组合时自动创建递归子目录:。请提供解释和答案
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..");      
 }