首页 > 解决方案 > Log4j2 RollingFileAppender 不将日志写入文件

问题描述

我在log4j2.xml中有以下 log4j2 配置,它没有将日志写入文件。我正在使用 Windows 10。我做错了什么?

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <RollingFile name="RollingFileAppender" fileName="/var/log/abc/test.log"
filePattern="/var/log/abc/test-%d{yyyy-MM-dd}-%i.log" append="true">
            <PatternLayout pattern="%d{DEFAULT} %-5p %c - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="31"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="Info">
            <AppenderRef ref="RollingFileAppender"/>
        </Root>
    </Loggers>
</Configuration>

以下是我正在使用的依赖项:

compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.14.0'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.14.0'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.2'

在我的日志中获取以下内容:

log4j:WARN No appenders could be found for logger (com.xyz.pqr).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

示例代码:

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public final class MyUtil { 
      private static Logger logger = LoggerFactory.getLogger(MyUtil.class); 

      if (condition == true) {
          logger.debug("Condition is true."); 
          return false;
      }
}

我错过了什么吗?

标签: javaloggingwindows-10log4j2rollingfileappender

解决方案


这些消息

log4j:WARN No appenders could be found for logger (com.xyz.pqr).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

表示存在 log4j 1 并且正在尝试使用它。要解决这个问题,您需要删除 log4j 1.x 依赖项并将其替换为 Log4j2 的 log4j-1.2-api 依赖项。

您的示例代码表明您正在使用 SLF4J API。要将其与 Log4j2 绑定,您必须包含 log4j-slf4j-impl 或 log4j-slf4j18-impl,具体取决于您使用的 SLF4J 版本。

一旦解决了这些依赖关系,如果您仍然看不到日志记录,请将 -Dlog4j2.debug=true 添加到命令行。这会将 Log4j 的初始化记录到 System.out 指向的任何位置。如果你什么也没看到,那就什么都没有。


推荐阅读