【发布时间】:2017-08-10 14:35:29
【问题描述】:
在运行具有多个依赖项 (JAR) 的多类 Java 应用程序时,我遇到的问题是,即使 RootLoggers 级别设置为“ALL”,次要记录器也没有登录调试级别。
我想用下面的 mwe 来说明这个问题,它可以作为意图。请注意,原始应用程序(更全面)不会登录调试级别,即使它应该从其根记录器继承日志级别(ALL)。次要记录器未在与根目录相同的级别进行记录的原因可能是什么?
log4j.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
debug = "true"
threshold = "all">
<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1} - %m%n"/>
</layout>
</appender>
<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="true"/>
<param name="file" value="out/Marktdaten_Uploader_Tool.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
</layout>
</appender>
<root>
<level value="all"/>
<appender-ref ref="consoleAppender"/>
<appender-ref ref="fileAppender" />
</root>
</log4j:configuration>
Class1(包含带有根记录器实例化的主方法):
package log4j_Test;
import org.apache.log4j.*;
public class LoggerStart {
private static Logger logger = Logger.getRootLogger();
public static void main(String[] args) {
logger.debug("message");
new Class2();
}
}
Class2(包含次要记录器和登录调试级别的命令):
package log4j_Test;
import org.apache.log4j.Logger;
public class Class2
{
private static Logger logger = Logger.getLogger(Class2.class);
Class2()
{
logger.debug("My debug message from Class2");
}
}
【问题讨论】:
-
Class1和Class2完全一样...... -
谢谢,改正
-
真的没有人给我一些建议吗?我已经在这个问题上投入了大量时间 - 没有成功。
-
我不知道... 是不是有可能,
Class2的Logger在配置被处理之前被实例化?这应该记录到控制台... -
在 Class2 实例化之前,在运行开始时直接处理配置。