我有一个项目a-conf
和src/main/resources/logback/conf/a/CommonAppenders.xml
文件:
<included>
<appender name="FILE" class="FileAppender" />
</included>
我还有另一个项目a-runable
,logback.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
。
答案 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