我有一个项目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 不能包含类路径中的资源,因为 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
但没有效果。
我不知道我能做什么(无需更改代码,只需更改配置)。欢迎任何帮助。
附注我发现类似的问题here ,但是 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
关于java - Logback 在 OSGi 容器中包含片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10744235/