如何使用slf4j将log4j 2配置文件放在封装的第三方框架的类路径上?

时间:2015-07-30 20:26:33

标签: logging eclipse-rcp classpath slf4j log4j2

我的Eclipse RCP应用程序包含一个封装第三方框架的插件。这个框架是一个纯OSGi系统,它使用 SLF4J 。我自己的应用程序使用 log4j 2 ,它工作正常。第三方框架似乎承认"我的" 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系统属性。后者主要是因为我无法弄清楚如何将它指向相对于 - 比如 - 我的应用程序主页的文件夹,这里的提示可能只是我之后的解决方案。将属性设置为绝对路径可以正常工作。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:-1)

尝试

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

对于SJLF,

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

只需在类路径中包含log4j-slf4j-impl-2.0.jar