Log4j2 看不到配置 xml

Log4j2 doesn't see configuration xml

大概是网上找遍了,但一定漏掉了什么。

我根据文档配置了 Log4j2 和 Commons-logging。我添加了 log4j2.xml,但它的配置对应用程序输出没有影响。我看起来像 Log4j 没有读取这个文件。这是我的配置:

pom.xml

<properties>
    <log4j2.version>2.3</log4j2.version>
</properties>

<dependencies>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j2.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j2.version}</version>
    </dependency>
</dependencies>

\src\main\resources\log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="TRACE">

    <Properties>
        <Property name="filename">fileName</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="Pattern Pattern %d{DEFAULT} %-5level %t : %logger{1} - %m%n"/>
        </Console>
        <RollingFile name="RollingFile"
                     fileName="${filename}.log"
                     filePattern="${filename}-%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="%d{DEFAULT} %-5level %t : %logger{1} - %m%n"/>
            <TimeBasedTriggeringPolicy/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Logger name="com.mydomain" level="TRACE"/>
        <Root level="TRACE">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Root>
    </Loggers>
</Configuration>

任意 class - 例如 class A

private static final Log logger = LogFactory.getLog(A.class);

应用程序具有 main() 功能,因此可以通过 IDE 或 mvn exec:java.

运行

问题:

正在记录日志 - 但采用默认方式。

正如您在 log4j2.xml 文件中看到的那样,我将级别更改为 TRACE 并在模式中键入:Pattern Pattern 以检查 log4j2 是否正在使用我的自定义配置。

没有 logger.trace() 出现。无文本 Pattern Pattern。控制台中的 log4j 没有 error/warning。

请帮忙,告诉我哪里做错了?

编辑:

@B运行oMarcoVisioli 告诉我使用 org.apache.logging.log4j.LogManager 而不是 LogFactory。所以我在 main() 方法中添加了新的记录器:

private static final Logger logger_new = LogManager.getLogger(CalculationApp.class);

通过这个 logger_new 进行日志记录工作正常,所以我设置了 TRACE 级别,我在应用程序启动时也看到了一些日志,首先:

Starting configuration XmlConfiguration[location=target\classes\log4j2.xml]

但是通过LogFactory登录还是不行。

通常是文件所在位置的问题..

来自文档

默认情况下,Log4j 在类路径中查找名为 log4j2.xml(而不是 log4j.xml)的配置文件。

您需要将 log4j-jcl 依赖项添加到您的 POM,它将作为 commons-logging 和 log4j2 之间的桥梁。