gpt4 book ai didi

java - Log4j2 不会在运行时更改日志记录级别

转载 作者:行者123 更新时间:2023-11-30 02:49:29 26 4
gpt4 key购买 nike

是的,我已阅读所有相关问题。我正在使用 log4j2(尝试了版本 2.4 并更新到最新版本 2.6.2)。

我有一个供客户使用的小型实用程序。我热衷于将暴露的配置保持在最低限度。但对于有问题的情况,我还想添加一个 -debug 标志以在运行时启用调试日志。

这是我启用调试日志记录的代码

private static void enableDebugLogs(){
LoggerContext ctx = (LoggerContext) LogManager.getContext();
LoggerConfig log = ctx.getConfiguration().getRootLogger();

System.out.println(log.getLevel()); // INFO

log.setLevel(Level.DEBUG);

System.out.println(log.getLevel()); // DEBUG

ctx.updateLoggers();

System.out.println(ctx.getRootLogger().getLevel()); // DEBUG, hey it works, right?
}

但它实际上不适用于以下任何情况:

enableDebugLogs();
logger.debug("Debug mode on"); // static, already made logger. Level did not change

LogManager.getLogger(Main.class).debug("Debug"); // Nope, not printing

Logger root = LogManager.getRootLogger();
root.info("Level: " + root.getLevel()); // Level: INFO, should be DEBUG

实用程序通常在 30 秒内完成,因此更改应该是即时的。这是log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level - %msg%n"/>
</Console>
<RollingFile name="File" fileName="program_name.log" filePattern="program_name-archived.log">
<PatternLayout>
<Pattern>%d{HH:mm:ss.SSS} %-5level - %msg%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10 KB" />
</Policies>
<DefaultRolloverStrategy min="1" max="1"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>

使用AppenderRefs有问题吗?我可以以某种方式告诉 Appender 从根记录器更新日志记录级别吗?

最佳答案

找到了真正的问题。必须使用:

LoggerContext ctx = (LoggerContext) LogManager.getContext(false);

而不是

LoggerContext ctx = (LoggerContext) LogManager.getContext();

API 指出区别是“返回 LoggerContext”和“返回当前 LoggerContext”。对于没有 boolean 参数的版本,我显然错过了这一点信息:

“警告 - 此方法返回的 LoggerContext 可能不是用于为调用类创建 Logger 的 LoggerContext。”

关于java - Log4j2 不会在运行时更改日志记录级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39160849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com