使用 XML 文件 (log4j2.xml) 配置 Log4j 2

2022-09-01 15:52:03

我想使用新的Log4J 2 - Java Logging Framework。一切正常,但我尝试了一个小时来加载自定义配置文件来配置日志记录(如日志级别)。

这是我的log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </appenders>
  <loggers>
    <root level="error">
      <appender-ref ref="Console"/>
    </root>
  </loggers>
</configuration>

我尝试了以下方法,但没有任何效果:

  • 移动 log4j2.xml文件,使其位于默认包中。
  • 将 log4j2.xml 文件移动到项目中的任意位置
  • 将 log4j2.xml 文件命名为“log4j.xml”
  • 在项目中创建一个文件夹,将 log4j2.xml 文件放在该位置,然后将该文件夹添加到运行时类路径中

由于官方网站无法帮助我,我希望你能帮助我使用我的配置文件进行Log4j 2。


答案 1

重要提示:请确保配置文件的名称是(注意句点之前的名称),而不是log4j2.xml2log4j.xml

我的猜测是没有发生任何事情,因为使用错误级别没有记录任何内容。您可能想尝试添加另一个记录器,如下所示:

<logger name="com.foo.Bar" level="trace">
  <appender-ref ref="Console"/>
</logger>

看起来“配置”部分可能是一个很好的资源。

为了进一步详细说明,您指定了一个级别设置为“error”的记录器:

<root level="error">
  <appender-ref ref="Console"/>
</root>

这意味着只有使用 Level.ERROR 记录的消息才会显示在日志中。添加限制级别较低的记录器将允许在日志中显示更多消息。我建议您查看手册的“体系结构”部分(如果向下滚动页面,您将看到解释日志记录级别的表)。或者,您可以只更改要跟踪的根记录器的级别(而不是添加新的记录器)

给定您指定的配置,执行以下代码会产生类似13:27:50.244 [main] ERROR com.example.Log4j2Tester - testing ERROR level

package com.example;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Log4j2Tester {
    private static final Logger LOG = LogManager.getLogger(Log4j2Tester.class);

    public static void main(String[] args) {
        LOG.error("testing ERROR level");

//if you change the level of root logger to 'trace'
//then you'll also see something like
//    13:27:50.244 [main] TRACE com.example.Log4j2Tester - exiting application
        LOG.trace("exiting application");
    }
}

答案 2

提示:要使用自定义 log4j 文件。(默认的“log4j2.xml”)。在某些情况下,拥有多个配置可能很有用。

以防万一,如果有人使用maven并希望配置log4j2,这是您在pom中需要的.xml:

                <systemProperties>
                    <property>
                        <name>/log4j.configuration</name>
                        <value>.../../Foo-log4j.xml</value>
                    </property>
                </systemProperties>

默认情况下,“log4j2.xml”是预期的文件名。但是,我们可以通过设置log4j.configuration system属性来覆盖它。在上面的例子中,我使用自定义配置文件作为“Foo-log4j.xml”。

您可以通过 CLI 执行相同的操作:

-Dlog4j.configuration="Foo-log4j.xml"

推荐