35

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

我还没有找到任何与(否则更好的)Logback 日志框架等效的东西。有什么方法可以在运行时打印(用于诊断目的),哪个配置文件 Logback 用于引导自身?

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

4

4 回答 4

35

你可以设置一个 Java 系统属性来输出 Logback 调试信息:

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

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

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

于 2016-01-28T21:25:49.450 回答
27

如果你想深入了解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加载的配置文件。

于 2013-09-20T17:53:05.127 回答
10

您可以debug="true"logback.xml您控制的文件中进行设置,如下所示:

<configuration debug="true">

(...)

</configuration

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

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

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

于 2013-09-20T17:45:15.747 回答
1

不是很科学,但如果您只想快速确认,它会起作用。

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

于 2016-11-21T19:05:30.257 回答