Logback包含OSGi容器中的片段

时间:2012-05-24 19:43:02

标签: java osgi logback equinox pax-runner

我有一个项目a-confsrc/main/resources/logback/conf/a/CommonAppenders.xml文件:

<included>
    <appender name="FILE" class="FileAppender" />
</included>

我还有另一个项目a-runablelogback.xml配置导入CommonAppenders.xml

<configuration>
    <!-- this is classpath import -->
    <include resource="logback/conf/a/CommonAppenders.xml" />
    ...
</configuration>

我可以在独立jar中编译a-runable,其中包含所有依赖项(a-conf是其中之一)或作为OSGi包。当我运行独立应用程序时,一切正常 - 日志文件按照CommonAppenders.xml中的指定显示。但是当我运行OSGi容器时,没有创建日志文件。我认为logback不能包含来自classpath的资源,因为OSGi容器中的每个bundle都有自己的类加载器(logback使用ClassLoader.getResource()来包含文件)。

我在Export-Package: logback.conf.a中检查了a-conf.jar/META-INF/MANIFEST.MF(这是由maven bundlor插件完成的) - 没关系。将Import-Package: logback.conf.a添加到a-runable但没有效果。

我不知道我能做什么(没有代码可以改变,只需要配置)。欢迎任何帮助。

P.S。我发现了类似的问题here,但logback.xml已经在类路径中,并且它自己的appender工作正常。此外,我现有的日志中没有任何FileNotFoundException

1 个答案:

答案 0 :(得分:1)

默认情况下,如果你没有配置一个监听器,我相信只会丢弃Logback的启动错误(但我可能记得错了)。关键可能是a-conf需要是包含logback.jar的bundle的片段。这就是我为拥有一些自制软件包的软件包所做的事情。

如果您想查看预先配置Logback以将其启动错误输出到OSGi容器的设置,请查看Pax-Logger 1.7 - https://github.com/ops4j/org.ops4j.pax.logging/tree/master/pax-logging-logback