使用slf4j如何将log4j 2配置文件放到封装的第三方框架的classpath中?

How to put log4j 2 configuration file on the classpath of encapsulated third-party framework using slf4j?

我的 Eclipse RCP 应用程序包含一个封装第三方框架的插件。本框架,纯OSGi系统,使用SLF4J。我自己的应用程序使用 log4j 2,效果很好。第三方框架似乎可以很好地识别 "my" log4j 2,但会触发通常的 ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 消息。

将文件 log4j2.xml 添加到文件夹 src/main/resources(是的,并将其添加到构建中) 没有任何效果。

如何为第三方框架的 SLF4J 实例提供配置文件?我不认为我可以访问它的类路径,我想避免设置 log4j.configurationFile 系统 属性。后者主要是因为我无法弄清楚如何让它指向相对于我的应用程序主页的文件夹,这里的提示可能只是我所追求的解决方案。将 属性 设置为绝对路径就可以了。

尝试

String fileName = "config/log4j2.xml";
Configurator.initialize(null, fileName);

对于 SJLF,

https://logging.apache.org/log4j/2.x/log4j-slf4j-impl/index.html

只需在 class 路径

中包含 log4j-slf4j-impl-2.0.jar

我在重新考虑为 log4j 2 配置文件设置系统 属性 时找到了一个相对简单的解决方案。

当我在我的应用程序入口(核心)插件的 Activatorstart 方法中包含以下内容时,它工作正常,即以编程方式设置系统 属性 我在哪里可以访问相对于我的应用程序启动器等的路径。请注意,核心插件的配置文件没有问题,只有第三方框架的问题。

// Configure log4j2 configuration file to be found
System.setProperty("log4j.configurationFile",
    getBundle().getResource("log4j2.xml").getPath());