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

2019-07-03 13:50发布

我想用新的Log4J的2 - 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我的配置文件的工作。

Answer 1:

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

我的猜测是什么也没有发生,因为没有使用错误级别记录。 你可能想尝试添加另一个记录器,像这样:

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

貌似配置部分可能是一个很好的资源。

进一步制定,你指定设置为“错误”水平的记录:

<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");
    }
}


Answer 2:

提示:要使用自定义的log4j文件。 (更确切地说默认 “log4j2.xml” 的thingie)。 这可能是有在某些情况下多配置非常有用。

只是,如果使用任何一个行家,并要配置log4j2的情况下,这是你在你的pom.xml需要的东西:

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

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

您可以通过CLI做同样的:

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


Answer 3:

我的2美分:

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

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

在默认情况下,(即,在位于SRC log4j2.xml文件/)的日志记录级别设置为错误。 但在运行测试时,我想记录将跟踪。 而且,当然记录到一些或多或少的硬编码文件。

也就是说,本来我不喜欢的东西:

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的将已经被设置(即静态最后记录器记录= ...将首先执行。)

我所做的,就是这样使用@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");

    }
}

BTW,资源/可放置在测试包,所以你不发货“测试”的log4j设置。

希望能帮助到你



Answer 4:

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

log4j.configurationFile='xxxx/xxx/xxx'  


Answer 5:

一种用于蚀用户提示:

右键单击该项目,并单击“刷新”。 确保你可以看到log4j2.xml文件蚀。

完整的答案在这里: log4j的2 -配置问题



Answer 6:

这更是解决“我不,如果日志文件的conf正在读取”问题的一个有价值的提示。 先从选项您JVM -Dlog4j.debug 。 当它启动时会打印所有,它试图读取日志配置文件。 它将由一个列出一个。 显示最后一个是系统使用的一个。

如果你是在JEE服务器,你可能需要把它放在一个“jvm.options”文件的某处。 如果它是一个罐子,只是-Dlog4j.debug运行java。



Answer 7:

放入project's根文件夹的src /主要LOG4J2.XML。



文章来源: Using a XML File (log4j2.xml) to configure Log4j 2