当前位置: 首页 > 知识库问答 >
问题:

使用XML文件(log4j2.XML)配置log4j2

锺离卓
2023-03-14

我想使用新的log4j2-Java日志框架。一切正常,但我从一小时后就尝试加载一个自定义配置文件来配置日志记录(如日志级别)。

这是我的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和我的配置文件一起工作。

共有3个答案

朱毅
2023-03-14

除了使用默认配置文件log4j2之外。xml(或log4j2test.xml)在类路径根文件夹中,可以使用此系统属性指定配置文件路径(在java命令行中使用-D)

log4j.configurationFile='xxxx/xxx/xxx'  
夔光霁
2023-03-14

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

以防万一,如果任何一个使用maven和希望配置log4j2,这里是你需要在你的pom.xml:

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

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

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

-Dlog4j.configuration="Foo-log4j.xml"
柯波峻
2023-03-14

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

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

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

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

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

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

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

给定您指定的配置,执行下面的代码会产生类似于13:27:50.244[main]ERRORcom.example.Log4j2Tester-测试ERROR级别

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");
    }
}
 类似资料:
  • 问题内容: 我想使用新的Log4J 2-Java Logging Framework。一切正常,但是一个小时以来,我尝试加载一个自定义配置文件来配置日志记录(如日志级别)。 这是我的log4j2.xml: 我尝试了以下方法,但没有任何效果: 移动log4j2.xml文件,使其位于默认软件包中。 将log4j2.xml文件移动到项目中的任何位置 将log4j2.xml文件命名为“ log4j.xml

  • 问题内容: 我已将应用程序迁移到log4j 2,并通过log4j2.xml对其进行了配置 但是,我正在使用的某些库取决于log4j1。如果我使用以下命令运行该应用程序: log4j 1抱怨找不到配置文件。我正在使用log4j 2,log4j-1.2-api-2.0-rc1.jar提供的log4j 1.x桥。是否可以使用单个log4j2.xml进行配置? 我尝试过的替代方法是同时配置log4j和lo

  • 我已经将应用程序迁移到Log4J2,并通过log4j2.xml对其进行了配置 但是,我使用的一些库依赖于log4j1。如果我使用以下方式运行应用程序: 我尝试的另一种方法是将log4j和log4j2配置在一起: 我担心的是日志配置文件和输出的碎片化。我还担心log4j.xml和log4j2.xml之间可能存在的冲突。例如,logfile Error.log被配置为使用log4j1中的FileApp

  • 在我使用Log4j版本之前的时间。1在Spring应用。我用这样的东西来定义log4j的位置。属性配置文件驻留: 现在我切换到Log4j ver.2,我有一个XML配置: 但Spring似乎不使用此文件,并且日志记录并没有附加到控制台或数据库中。 这是输出: 我做错了什么?

  • Usng maven和Springboot。我希望每个环境(dev、cert)使用不同的文件配置(log4j2.xml、application.properties)。我在pom上创建了两个配置文件。xml文件,我还有两个文件夹,分别放在src/main/resources中,每个文件夹都有文件配置(dev和cert)。我想根据我使用的配置文件包括这些文件。我在目录中有其他文件,所以我不想使用这种

  • 我想在application.properties中定义高级文件日志记录,以方便利用我的log4j2.xml文件配置。我的log4j2配置本身运行良好,但是我希望控制日志级别以及application.properties文件中的日志文件和路径信息。我在应用程序的pom文件中有spring-boot-starter-log4j2依赖项。 在log4j2.xml中,我有一个属性 ,其中LOG-DIR