如何确定 Logback 实际使用的日志配置源?

2022-09-01 05:02:21

log4j 有一个属性,它将帮助用户指示实际用于配置日志记录系统的配置文件。log4j.debug

我无法找到与(否则更高级的)Logback日志记录框架等效的东西。有没有办法在运行时打印(用于诊断目的)Logback用于引导自身的配置文件?

[编辑]为了澄清,理想情况下,我想要一个不需要我修改配置文件本身的解决方案(因为例如,一个组装不良的第三方JAR可能会被错误地拾取,并且在我的日志返回配置XML之前)。


答案 1

您可以设置 Java 系统属性以输出日志回滚调试信息:

java -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener

自动状态打印的 Logback 文档(最底部提到强制状态输出)和 logback.statusListenerClass 属性进一步解释了这一点:

在没有状态消息的情况下,跟踪恶意日志.xml配置文件可能很困难,尤其是在无法轻松修改应用程序源的生产环境中。为了帮助识别恶意配置文件的位置,可以通过“logback.statusListenerClass”系统属性(定义如下)设置 StatusListener 以强制输出状态消息。“logback.statusListenerClass”系统属性还可用于在发生错误时自动生成的输出静音。


答案 2

如果你想深入探讨,你可以做以下事情Logback

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.joran.util.ConfigurationWatchListUtil;

public class Main {

    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) throws Exception {
        LoggerContext loggerContext = ((ch.qos.logback.classic.Logger)logger).getLoggerContext();
        URL mainURL = ConfigurationWatchListUtil.getMainWatchURL(loggerContext);
        System.out.println(mainURL);
        // or even
        logger.info("Logback used '{}' as the configuration file.", mainURL);
    }
}

它将打印加载的配置文件。URL


推荐