java - Log4j:以编程方式更改日志级别,适用于要创建的记录器

标签 java log4j

我在我的代码中这样声明记录器:

Logger logger = LoggerFactory.getLogger(MyClass.class);

我希望能够在运行时以编程方式更改记录器的日志级别。我已经尝试通过 LogManager 遍历存储库中的记录器,但它只将新的日志级别应用于代码中实例化的记录器。如果创建了一个新的记录器实例,它不会使用新的日志级别。我的要求是我的 Web 应用程序中的日志级别需要通过管理 GUI 进行配置,并且这个新的日志级别需要应用于我代码中的所有记录器(不包括第三方库日志记录,例如 JSF、Spring、Hibernate 等) .

这就是我现在正在做的,但不符合我的要求,因为它没有将日志级别应用于新实例化的记录器:

Enumeration<Logger> currentLoggers = LogManager.getCurrentLoggers();
while(currentLoggers.hasMoreElements()) {
    Logger logger = currentLoggers.nextElement();
    if (StringUtils.startsWith(logger.getName(), "com.my.company")) {
        logger.setLevel(logLevel);
    }
}

我正在使用 Log4j 1.2.17。

最佳答案

找不到资源了,但至于我褪色的内存 LogManager.getLogger("com.my.company").setLevel(whateverloglevel) 应该可以解决问题。

所有使用 LogManager.getLogger(MyClass.class) 创建的记录器,其中 MyClass 在 com.my.company 或其子树中 将受到影响。

whateverloglevelLevel 之一:

ALL
ALL 的级别最低,旨在打开所有日志记录。
DEBUG
DEBUG 级别指定对调试应用程序最有用的细粒度信息事件。
ERROR
ERROR 级别指定可能仍允许应用程序继续运行的错误事件。
FATAL
FATAL 级别指定非常严重的错误事件,可能会导致应用程序中止。
INFO
INFO 级别指定在粗粒度级别突出显示应用程序进度的信息性消息。
OFF
OFF 具有最高级别,旨在关闭日志记录。
TRACE
TRACE 级别指定比 DEBUG 更细粒度的信息事件
WARN
WARN 级别指定潜在的有害情况。

请注意,这可能在 log4j 2 中不起作用。

对于(我认为)版本 >= 2.4,请参阅:

关于java - Log4j:以编程方式更改日志级别,适用于要创建的记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25506683/

相关文章:

java - 如果 log4j jar 在 webApp 的库中,Log4jConfigListener 不工作

java - boolean 测试的问题

java - java中记录器的替代方案

java - log4j:WARN 在 org.apache.log4j.DailyRollingFileAppender 中没有这样的属性 [maxFileSize]

java - 如何通过 GridLogger 将日志存储到文件中?

java - Hibernate 4 session log4j

java - log4j:错误无法加载驱动程序java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver

java - 如何在java中对一个数组列表进行排序并以相同的顺序设置另一个列表

java - 在 xml 中创建的字符串数组与在 Java 类中初始化的字符串数组有什么区别

java - 跨 2 个日历年的日历计算存在问题