【问题标题】:Log4j configuration(Size Based) not workingLog4j 配置(基于大小)不起作用
【发布时间】:2013-02-27 06:37:32
【问题描述】:

我的应用程序在 Log4j 属性文件中完成了以下条目。基于大小的滚动不适用于此应用程序。 文件在 5 MB 时不会翻转,并且应用程序会继续记录并以 GB 为单位。一次运行会生成大约 6 MB 的日志。该应用程序每天运行多次。

有人可以帮忙指出我在哪里做错了吗?

# SampleApp configuration
log4j.category.com.ibm.hmel.hwmmphdya=INFO, SampleApp  
log4j.additivity.com.ibm.hmel.hwmmphdya=false  
log4j.appender.SampleApp =org.apache.log4j.rolling.RollingFileAppender  
log4j.appender.SampleApp.File=S:/FIH/LOG/SAMPLE_APP_01/SAMPLE_APP_01.log  
log4j.appender.SampleApp.layout=org.apache.log4j.PatternLayout  
log4j.appender.SampleApp.layout.ConversionPattern=%-21d{dd-MMM-yyyy HH:mm:ss} [%t] %-5p %c %x - %m%n  

log4j.appender.SampleApp.RollingPolicy=org.apache.log4j.rolling.FixedWindowRollingPolicy
log4j.appender.SampleApp.RollingPolicy.FileNamePattern=S:/HIF/LOG/SAMPLE_APP_01  /SAMPLE_APP_01.log.%i.zip
log4j.appender.SampleApp.RollingPolicy.MinIndex=1
log4j.appender.SampleApp.RollingPolicy.MaxIndex=10
log4j.appender.SampleApp.TriggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy
log4j.appender.SampleApp.TriggeringPolicy.MaxFileSize=5242880

【问题讨论】:

    标签: java log4j rollingfileappender


    【解决方案1】:

    以下作品适合我

    log4j.rootLogger=TRACE, Roller
    
    log4j.appender.Roller=org.apache.log4j.rolling.RollingFileAppender
    log4j.appender.Roller.RollingPolicy=org.apache.log4j.rolling.FixedWindowRollingPolicy  
    log4j.appender.Roller.RollingPolicy.maxIndex=13
    log4j.appender.Roller.TriggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy  
    log4j.appender.Roller.TriggeringPolicy.MaxFileSize=26214400
    log4j.appender.Roller.RollingPolicy.FileNamePattern=j_log_%i.log
    log4j.appender.Roller.RollingPolicy.ActiveFileName=j_log_0.log
    log4j.appender.Roller.layout=org.apache.log4j.PatternLayout
    log4j.appender.Roller.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
    

    【讨论】:

      【解决方案2】:

      尝试将单位添加到您的尺寸

      MaxFileSize=5242880KB
      

      【讨论】:

      • 嗨克里斯蒂安,据我了解,它不应该有效果。但我已经尝试过使用 5MB,但它也没有工作。
      【解决方案3】:

      我可以看到您正在使用 lo4j 伴侣附加功能。 请确保您使用的是最新的 log4j.jar(1.2.17 版适用于我,我遇到了 1.2.14 版的问题)。

      我编写了简单的测试应用程序来重现您的问题:

      package com.ibm.hmel.hwmmphdya;
      import org.apache.log4j.Logger;
      
      public class Roller {
      
          private Logger logger = Logger.getLogger(Roller.class);
          private final String FAKE_LOG_LINE = "12345678901234567890123456789012345678901234567890";
      
          public static void main(String[] args) {
              Roller roller = new Roller();
              roller.logStuff();
          }
      
          private void logStuff() {
              for (;;) { // ugly loop
                  logger.info(FAKE_LOG_LINE);
              }
          }
      }
      

      并将log4j.properties 放在类路径中:

      log4j.category.com.ibm.hmel.hwmmphdya=INFO, Roller
      log4j.additivity.com.ibm.hmel.hwmmphdya=false
      log4j.appender.Roller=org.apache.log4j.rolling.RollingFileAppender
      log4j.appender.Roller.File=D:/FIH/SAMPLE_APP_01.log
      log4j.appender.Roller.layout=org.apache.log4j.PatternLayout
      log4j.appender.Roller.layout.ConversionPattern=%-21d{dd-MMM-yyyy HH:mm:ss} [%t] %-5p %c %x - %m%n
      log4j.appender.Roller.RollingPolicy=org.apache.log4j.rolling.FixedWindowRollingPolicy
      log4j.appender.Roller.RollingPolicy.FileNamePattern=D:/FIH/SAMPLE_APP_01.log.%i.zip 
      log4j.appender.Roller.RollingPolicy.MinIndex=1 
      log4j.appender.Roller.RollingPolicy.MaxIndex=10 
      log4j.appender.Roller.TriggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy
      log4j.appender.Roller.TriggeringPolicy.MaxFileSize=5242880
      

      我认为我的结果还可以,这些是我的日志输出目录的内容:

      2013-02-27  09:30    <DIR>          .
      2013-02-27  09:30    <DIR>          ..
      2013-02-27  09:30         4 440 720 SAMPLE_APP_01.log
      2013-02-27  09:30         5 242 920 SAMPLE_APP_01.log.1.zip
      2013-02-27  09:30         5 242 920 SAMPLE_APP_01.log.2.zip
      2013-02-27  09:30         5 242 920 SAMPLE_APP_01.log.3.zip
      2013-02-27  09:30         5 242 920 SAMPLE_APP_01.log.4.zip
      2013-02-27  09:30         5 242 920 SAMPLE_APP_01.log.5.zip
      

      文件大小“5 242 920”或多或少是配置的大小。

      您可以通过提供-Dlog4j.debug 系统属性来进一步解决您的问题。

      更新: 您可能希望确保伴随的附加库 (apache-log4j-extras-1.1.jar) 存在于类路径中。

      【讨论】:

      • 感谢 Pawel 的努力。我有相同的版本,即 1.2.17 并且 apache log4j extra 也存在。
      • 我很惊讶同样的事情对你有用,而且它的意图是什么。我正在尝试按照你所说的进行调试。
      • 如何提供配置属性?在我的示例应用程序中,我依赖于默认“log4j.properties”的自动发现。也许在您的情况下,类路径上有许多相同命名的属性文件,其中一个缺少滚动附加程序?我想如果您的应用程序有一些包含它们自己的 log4j.properties 文件的 3rd-party jar 依赖项,或者当它在应用程序服务器的控制下运行时(它可以有单独的记录器配置,它在类路径上比您的自定义配置更早),这可能会很棘手。如果您使用 -Dlog4j.debug 选项运行,您将看到使用了哪个 log4j.properties。
      【解决方案4】:

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

          #Worked with 2.17 version
          #make log files rotate based on size and zip old rotated
          log4j.rootLogger=INFO, loggerId
          log4j.appender.loggerId=org.apache.log4j.rolling.RollingFileAppender
          log4j.appender.loggerId.rollingPolicy=org.apache.log4j.rolling.FixedWindowRollingPolicy
          log4j.appender.loggerId.rollingPolicy.maxIndex=5
          log4j.appender.loggerId.triggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy
          log4j.appender.loggerId.triggeringPolicy.MaxFileSize=10000000
          log4j.appender.loggerId.rollingPolicy.FileNamePattern=worker-%i.log.gz
          log4j.appender.loggerId.rollingPolicy.ActiveFileName=worker.log
          log4j.appender.loggerId.layout=org.apache.log4j.PatternLayout
          log4j.appender.loggerId.layout.ConversionPattern=%d [%t] %-5p (%F:%L) - %m%n
      

      更多房产详情请查看here

      【讨论】:

        猜你喜欢
        • 2013-11-27
        • 2015-02-20
        • 2017-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多