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

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

这是我的log4j2.xml:

             

我尝试了以下,但没有任何作用:

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

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

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

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

    

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

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

    

这意味着只有使用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"); } } 

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

如果任何人使用maven并希望配置log4j2,以下是你需要的pom.xml:

    /log4j.configuration .../../Foo-log4j.xml   

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

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

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

我的2美分:

软件系统:log4j 2,NetBeans和TestNG。

我有同样的问题,但有测试环境。

默认情况下(即位于src /中的log4j2.xml文件中),日志记录级别设置为error。 但是在运行测试时,我希望记录是跟踪的。 并且,当然记录到一些或多或少硬编码的文件。

也就是说,最初我做了类似的事情:

 public class someTestClass { static final Logger log=LogManager.getLogger("test.someTestClass"); ...... @Test public void SomeMethod(){ System.setProperty("log4j.configurationFile", "resources/log4j2_conf.xml"); log.trace("This will not show because the default logging level is ERROR and the resources/log4j2_conf.xml is not loaded"); } 

问题是,当执行System.setProperty指令时,log4j将被设置(即,将首先执行静态最终Logger log = …)。

我做了什么,是这样使用@BeforeClass:

  public class someTestClass { Logger log; @BeforeClass public void setLogger(){ SetEnv.SetEnvironment(); log = LogManager.getLogger("TestRealClientRealServer"); } ...... @Test public void SomeMethod(){ log.trace("This will show, because in log4j2_conf.xml the root level is set to TRACE"); } } 

顺便说一句,资源/可以放在测试包中,因此您不需要发送“test”log4j设置。

希望能帮助到你

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

 log4j.configurationFile='xxxx/xxx/xxx' 

eclipse用户的提示:

右键单击该项目,然后单击“刷新”。 确保您可以在eclipse中看到log4j2.xml文件。

完整答案: log4j 2 – 配置问题

LOG4J2.XML放在项目的根文件夹src / main中