我想用新的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我的配置文件的工作。
重要提示:确保配置文件的名称是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");
}
}
提示:要使用自定义的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"
我的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设置。
希望能帮助到你
除了用在类路径的根文件夹默认的配置文件,log4j2.xml(或log4j2-的test.xml),你可以使用这个系统属性来指定配置文件的路径(在java命令行中使用-D)
log4j.configurationFile='xxxx/xxx/xxx'
一种用于蚀用户提示:
右键单击该项目,并单击“刷新”。 确保你可以看到log4j2.xml文件蚀。
完整的答案在这里: log4j的2 -配置问题
这更是解决“我不,如果日志文件的conf正在读取”问题的一个有价值的提示。 先从选项您JVM -Dlog4j.debug
。 当它启动时会打印所有,它试图读取日志配置文件。 它将由一个列出一个。 显示最后一个是系统使用的一个。
如果你是在JEE服务器,你可能需要把它放在一个“jvm.options”文件的某处。 如果它是一个罐子,只是-Dlog4j.debug运行java。
放入project's根文件夹的src /主要的LOG4J2.XML。