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

时间:2013-09-20 17:38:14

标签: java logback

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

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

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

4 个答案:

答案 0 :(得分:24)

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

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

automatic status printing的Logback文档(非常底部提及强制状态输出)和logback.statusListenerClass property进一步解释了这一点:

  

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

答案 1 :(得分:23)

如果您想深入进入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

答案 2 :(得分:8)

你可以在你控制的loback.xml文件中设置debug =“true”,如下所示

<configuration debug="true">

(...)

</configuration

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

-Dlogback.configurationFile=/path/to/yourlogback.xml

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

答案 3 :(得分:0)

不是很科学,但如果您只想快速确认,它就有效。

我只是更改了日志条目模式并观察它是否在我的控制台/日志文件中发生了变化。