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 之间的桥梁。
大概是网上找遍了,但一定漏掉了什么。
我根据文档配置了 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 之间的桥梁。