【问题标题】:Log4J 2 not writing into fileLog4J 2 未写入文件
【发布时间】:2017-02-04 20:40:29
【问题描述】:

我正在尝试使用 log4j 2 实现一些日志记录。控制台输出正常,但是当我尝试将一些日志写入文件时,我无法管理它。

我的pom.xml

<dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8</version>
        </dependency>
    </dependencies>

我的log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="60">
    <Properties>
        <Property name="log-path">logs</Property>
        <Property name="archive">${log-path}/archive</Property>
    </Properties>
    <Appenders>
        <Console name="Console-Appender" target="SYSTEM_OUT">
            <PatternLayout>
                <pattern>
                    [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
                </pattern>>
            </PatternLayout>
        </Console>
        <File name="File" fileName="${log-path}/xmlfilelog.log" immediateFlush="true" >
            <PatternLayout>
                <pattern>
                    [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
                </pattern>
            </PatternLayout>
        </File>
    </Appenders>
    <Loggers>
        <Logger name="les.dam" level="trace">
            <AppenderRef ref="File" level="trace"/>
        </Logger>
        <Root level="trace">
            <AppenderRef ref="Console-Appender"/>
        </Root>
    </Loggers>
</Configuration>

我使用 log4j 的方式如下:

private static Logger logger = LogManager.getLogger();
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warn message");
logger.error("This is an error message");
logger.fatal("This is a fatal message");

我使用记录器的类在les.dam包下。

xml配置在src/main/resources下。

日志文件夹与源文件夹处于同一级别。

【问题讨论】:

    标签: java logging log4j2


    【解决方案1】:

    您的配置看起来不错。一种可能的原因是找不到配置文件和默认配置(只有控制台出错)。

    要进行验证,请将您的配置更改为以&lt;Configuration status="trace" monitorInterval="60"&gt; 开头。这会将内部 log4j2 调试日志打印到控制台。

    您的log4j2.xml 配置文件是否位于src/main/resources? - 更新:感谢您的更新,是的,这很好。


    您可以尝试先使用绝对路径配置文件附加程序吗?

    您能显示进行日志记录的类的完整包名吗?

    【讨论】:

    • 是的,配置在 src/main/resources 中。我尝试调试跟踪并给你反馈。
    • 您可以先尝试使用绝对路径配置文件附加程序吗?还请显示正在记录的类的包名称。
    【解决方案2】:

    您必须检查 log4j2 是否使用您提供的 log4j2.xml,而不是默认配置。

    1. 更改 log4j2.xml。

    配置状态="trace" monitorInterval="60"

    然后检查控制台输出。

    1. 更改 Console-Appender 的 PatternLayout。

    %d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%t] %c{1} - %msg%n

    然后检查控制台输出。

    如果 log4j 正在使用 log4j2.xml,请检查 FileAppender 配置 https://logging.apache.org/log4j/2.x/manual/appenders.html#FileAppender.

    如果 log4j 没有使用 log4j2.xml,https://logging.apache.org/log4j/2.x/manual/configuration.html。 -Dlog4j.configurationFile=src/main/resources/log4j2.xml

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-26
      • 2016-08-19
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      相关资源
      最近更新 更多