如何确定 Logback 实际使用的日志配置源?
log4j 有一个属性,它将帮助用户指示实际用于配置日志记录系统的配置文件。log4j.debug
我无法找到与(否则更高级的)Logback日志记录框架等效的东西。有没有办法在运行时打印(用于诊断目的)Logback用于引导自身的配置文件?
[编辑]为了澄清,理想情况下,我想要一个不需要我修改配置文件本身的解决方案(因为例如,一个组装不良的第三方JAR可能会被错误地拾取,并且在我的日志返回配置XML之前)。
log4j 有一个属性,它将帮助用户指示实际用于配置日志记录系统的配置文件。log4j.debug
我无法找到与(否则更高级的)Logback日志记录框架等效的东西。有没有办法在运行时打印(用于诊断目的)Logback用于引导自身的配置文件?
[编辑]为了澄清,理想情况下,我想要一个不需要我修改配置文件本身的解决方案(因为例如,一个组装不良的第三方JAR可能会被错误地拾取,并且在我的日志返回配置XML之前)。
您可以设置 Java 系统属性以输出日志回滚调试信息:
java -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener
自动状态打印的 Logback 文档(最底部提到强制状态输出)和 logback.statusListenerClass 属性进一步解释了这一点:
在没有状态消息的情况下,跟踪恶意日志.xml配置文件可能很困难,尤其是在无法轻松修改应用程序源的生产环境中。为了帮助识别恶意配置文件的位置,可以通过“logback.statusListenerClass”系统属性(定义如下)设置 StatusListener 以强制输出状态消息。“logback.statusListenerClass”系统属性还可用于在发生错误时自动生成的输出静音。
如果你想深入探讨,你可以做以下事情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