【发布时间】: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("退出"); } }【问题讨论】: