从清单 Class 路径加载 logback.xml

Load logback.xml from Manifest Class-path

我正在尝试从我的可执行 myapp.jar 文件外部加载 logback.xml 文件。

myapp.jar 有一个 META-INF/MANIFEST.MF 文件,大致如下:

Manifest-Version: 1.0
Class-Path: logger-config lib/lib/jcl-over-slf4j-1.7.18.jar lib/slf4j-api-1.7.18.jar 
Main-Class: com.mycompany.MyAppMain

并居住在

my-app/
  lib/
    jcl-over-slf4j-1.7.18.jar
    slf4j-api-1.7.18.jar 
  logger-config/
    logback.xml
  myapp.jar

(还有很多其他 jar 依赖项,请删除)。

现在,如果我 运行 使用 java -jar myapp.jar 的应用程序,它可以正常启动,但 不会获取 logback.xml 文件 .

来自他们的文档:

If no such file is found, it checks for the file logback.xml in the classpath..

( http://logback.qos.ch/manual/configuration.html )

我知道我可以使用 logback.configurationFile 覆盖它,但是有没有办法将 XML 文件放到类路径中,以便 logback 自动加载它?它似乎只有在我将 logback.xml 打包到 myapp.jar(将其放在 src/main/resources 目录中)时才有效,但是配置文件将传播到使用 myapp.jar 的其他 JAR作为依赖项。

也许你只是把它剪掉了,但是你的class路径没有指定logback-classic依赖。 您必须确保 logback 在 class 路径定义中出现在 slf4j 之前。另外,请注意 logger-config 路径的尾部斜杠 - 如果没有它,logback 将找不到您的 logback.xml(有关详细信息,请参阅 here)。

像这样的东西应该可以工作:

Class-Path: lib/logback-classic-1.1.6.jar lib/logback-core-1.1.6.jar lib/jcl-over-slf4j-1.7.18.jar lib/slf4j-api-1.7.18.jar logger-config/