我有一个问题log4j ---我试图设置日志级别为DEBUG与log4j.properties文件.我知道这部分工作,因为另一个组件(netty)的工作,但到了我的时候,日志被设置为错误和以上.
以下是我的log4j.properties文件:
#Define root logger options
log4j.rootLogger=DEBUG, console
log4j.logger.com.ltsllc.miranda=DEBUG
#Define console appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p %c{1} - %m%n
下面是检查调试级别的代码:
if (l.isDebugEnabled()) {
l.debug("DEBUG is enabled");
} else {
l.error ("Debug is disabled");
l.error ("level is: " + l.getLevel());
}
下面是输出:
DEBUG ResourceLeakDetector - -Dio.netty.leakDetection.level: simple
DEBUG ResourceLeakDetector - -Dio.netty.leakDetection.targetRecords: 4
DEBUG ResourceLeakDetectorFactory - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@44b3606b
22:43:46.696 \[main\] ERROR com.ltsllc.miranda.Miranda - Debug is disabled
22:43:46.700 \[main\] ERROR com.ltsllc.miranda.Miranda - level is: ERROR
DEBUG DefaultChannelId - -Dio.netty.processId: 30572 (auto-detected)
DEBUG NetUtil - -Djava.net.preferIPv4Stack: false
我就料到会这样
DEGUG com.ltsllc.miranda.Miranda - DEBUG is enabled
3条答案
按热度按时间rqqzpn5f1#
从您提供的详细信息来看,问题可能源于各种来源:
1.验证日志初始化:确保“l”日志记录器为“米兰达”包正确初始化。您可能正在使用用于不同软件包的日志记录器,导致它无法获取DEBUG设置。
下面是一个例子:
1.确认您的配置文件位置:检查log4j.properties文件的位置是否正确。它必须在类路径上。对于Maven项目,通常将其放在
src/main/resources
目录中。1.检查多个配置:如果您有多个log4j配置文件(如log4j.xml和www.example.com),则Log4j可能从错误的文件中提取log4j.properties。最好只有一个配置文件,或者特别指出要使用哪一个。
1.log4j配置可能被覆盖:某些库或框架可能会无意中覆盖log4j配置。例如,Sping Boot 默认自动配置日志记录。这是值得考虑的,如果类似的事情可能会发生在你的情况。
1.考虑初始化顺序:日志记录系统的初始化可能晚于某些代码。请确保在应用程序生命周期中尽早初始化它。
检查这些潜在原因应有助于您识别和解决问题。
nnt7mjpx2#
当没有提供配置时,Log4j2参考实现(
log4j-core
)使用%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
模式和ERROR
级别。这就是您在标准输出中观察到的。日志API和后端可能绑定如下:
InternalLoggerFactory
)绑定到SLF4J(slf4j-api
),后者使用Log4j 1.x或Reload4j作为后端。此后端是您配置的后端。l
的完全限定类名是org.apache.logging.log4j.Logger
。我假设你不想使用Log4j 1.x作为后端(它在8年前就被宣布生命周期结束了),所以你需要:
1.通过添加包含以下内容的
log4j2.xml
文件来配置log4j-core
:log4j:log4j
和ch.qos.reload4j:reload4j
工件。这还包括SLF4J绑定org.slf4j:slf4j-log4j12
和org.slf4j:slf4j-reload4j
。slf4j-api
)不存在,但其他库可能直接使用SLF4J,则Netty绑定到Log4j2 API。如果你正在使用Maven,你需要这三个工件:如果您的库使用其他日志API(例如Jakarta Apache Commons Logging、
java.util.logging
、JBoss Logging),您还需要将它们绑定到log4j-api
。编辑:我建议不要使用Log4j 2.x的属性配置格式,因为以平面格式存储树状结构非常冗长。此外,在Log4j 1.x发布时,JRE没有XML解析器,现在它有了。
上面的XML配置可以转换为属性:
lbsnaicq3#
我在一个关于如何以编程方式设置日志记录级别的问题中找到了答案:
这就是this question的答案