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

Pet*_*ien 30 java logback

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

我无法找到与(否则更高级)Logback日志框架等效的东西.有没有办法在运行时打印(用于诊断目的),哪个配置文件Logback用于自举?

[编辑]为了澄清,我理想地喜欢一个不需要我修改配置文件本身的解决方案(例如,由于错误组装的第三方JAR可能被错误地拾取,并且在我的回溯配置之前XML).

Mic*_*l R 28

您可以设置Java系统属性以输出Logback调试信息:

java -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener
Run Code Online (Sandbox Code Playgroud)

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

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

  • 接受的答案对我不起作用,这样做.谢谢! (2认同)

Sot*_*lis 25

如果您想深入了解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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Fre*_*ose 9

你可以在你控制的loback.xml文件中设置debug ="true"

<configuration debug="true">

(...)

</configuration
Run Code Online (Sandbox Code Playgroud)

并确保在启动程序时,logback将使用该文件添加以下VM参数:

-Dlogback.configurationFile=/path/to/yourlogback.xml
Run Code Online (Sandbox Code Playgroud)

这并不能真正回答您的问题,而是为您提供解决方案.