【问题标题】:Log file not being created after update log4j version to 1.1.5将 log4j 版本更新到 1.1.5 后未创建日志文件
【发布时间】:2018-07-11 03:17:27
【问题描述】:

使用 log4j 库 1.1.4 和 slf4j-api 1.7.25 登录我的应用程序可以正常工作。

但是在将 log4j 库从版本 1.1.4 更新到 1.1.5(或更高版本)后,日志文件会停止创建,不会产生异常或警告。甚至版本 1.1.5 也相当旧,所以我宁愿使用更新的版本。配置的工作方式肯定发生了一些变化,但我不知道是什么。

这个简单的代码将在 log4j 1.1.4 中创建滚动日志文件,但不会生成更新版本的日志文件。缺少什么?

Maven 依赖项是:

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jul-to-slf4j</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.4</version>
        </dependency>
    </dependencies>

代码:

包 com.scratch.mylogtest; 导入 ch.qos.logback.classic.LoggerContext; 导入 ch.qos.logback.classic.encoder.PatternLayoutEncoder; 导入 ch.qos.logback.classic.spi.ILoggingEvent; 导入 ch.qos.logback.core.rolling.*; 导入静态 java.nio.charset.StandardCharsets.UTF_8; /** * 测试日志文件配置和翻转。它应该简单地创建一个日志文件,然后向其中写入足够的数据以导致 * 文件翻转到新的日志文件。 */ 公共类 LogbackTest1 { 公共静态无效主要(字符串[]参数){ final String LOG_LAYOUT = "%-5level \\(%logger{0}\\) [%date]: %m%n"; 最终 org.slf4j.Logger rootLogger = org.slf4j.LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME); rootLogger.info("初始化前对根记录器的测试"); ((ch.qos.logback.classic.Logger) rootLogger).setLevel(ch.qos.logback.classic.Level.DEBUG); //设置日志记录 SLF4JBridgeHandler.removeHandlersForRootLogger(); //删除正常的 JUL 日志记录... SLF4JBridgeHandler.install(); //...并将 JUL 日志记录路由到 SLF4J LoggerContext loggerContext = ((ch.qos.logback.classic.Logger) rootLogger).getLoggerContext(); //附加器 RollingFileAppender rollingFileAppender = new RollingFileAppender(); rollingFileAppender.setContext(loggerContext); rollingFileAppender.setFile("C:\\ProgramData\\LogTest\\log-test.log"); //编码器 PatternLayoutEncoder patternLayoutEncoder = new PatternLayoutEncoder(); patternLayoutEncoder.setContext(loggerContext); patternLayoutEncoder.setCharset(UTF_8); patternLayoutEncoder.setPattern(LOG_LAYOUT); patternLayoutEncoder.start(); //滚动策略 FixedWindowRollingPolicy fixedWindowRollingPolicy = new FixedWindowRollingPolicy(); fixedWindowRollingPolicy.setContext(loggerContext); fixedWindowRollingPolicy.setParent(rollingFileAppender); fixedWindowRollingPolicy.setFileNamePattern("C:\\ProgramData\\LogTest\\log-test.log.%i"); fixedWindowRollingPolicy.setMaxIndex(3); fixedWindowRollingPolicy.start(); //触发策略 SizeBasedTriggeringPolicy triggeringPolicy = new SizeBasedTriggeringPolicy(); triggeringPolicy.setMaxFileSize("100KB"); //启动附加程序 rollingFileAppender.setEncoder(patternLayoutEncoder); rollingFileAppender.setRollingPolicy(fixedWindowRollingPolicy); rollingFileAppender.setTriggeringPolicy(triggeringPolicy); rollingFileAppender.start(); //添加附加程序 ((ch.qos.logback.classic.Logger) rootLogger).addAppender(rollingFileAppender); 最终 org.slf4j.Logger 记录器 = org.slf4j.LoggerFactory.getLogger(LogbackTest1.class); // 将一些数据写入日志。写入足够的数据以使日志文件翻转到新文件 logger.info("开始"); int logTestLines = 5000; for (int i = logTestLines; i > 0; i--) { logger.info("日志测试行:" + i); } logger.info("退出"); } }

【问题讨论】:

    标签: java log4j logback


    【解决方案1】:

    找到了解决方案!

    从 logback 版本 1.1.5 开始,需要调用 SizeBasedTriggeringPolicy.start()。在 1.1.3 版本中,这不是必需的。

    从 1.1.9 版本开始,设置最大文件大小的方法也发生了变化,所以代码应该是这样的:

    SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = new SizeBasedTriggeringPolicy<>();
    triggeringPolicy.setMaxFileSize(FileSize.valueOf("100KB"));
    triggeringPolicy.start();
    

    通过调试方法发现问题

    StatusPrinter.print(loggerContext);
    

    打印此信息:

    15:47:22,788 |-WARN in ch.qos.logback.core.rolling.RollingFileAppender[null] - TriggeringPolicy has not started. RollingFileAppender will not start
    

    但如果不使用StatusPrinter,则不会打印任何警告。

    【讨论】:

      猜你喜欢
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多