日志包含 OSGi 容器中的片段



我有一个带有src/main/resources/logback/conf/a/CommonAppenders.xml文件的项目a-conf

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

此外,我还有另一个带有logback.xml配置的项目a-runable,它导入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不能包含类路径中的资源,因为OSGi容器中的每个捆绑包都有自己的类加载器(logback使用ClassLoader.getResource()来包含文件)。

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

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

附言我在这里发现了类似的问题,但是logback.xml已经在类路径中并且它自己的追加器工作正常。此外,我在现有日志中没有任何FileNotFoundException

默认情况下,如果您不配置侦听器,我相信 Logback 的启动错误会被简单地删除(但我可能记错了)。关键可能是 a-conf 需要是包含 logback.jar 的捆绑包的片段。这就是我为我的捆绑包所做的,其中包含一些自制附加器。

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

相关内容

最新更新