java - Logback 在 OSGi 容器中包含片段

标签 java osgi logback equinox pax-runner

我有一个项目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/

相关文章:

java - OSGi 基于角色的安全性

OSGI 捆绑状态宽限期

java - 滚动日志文件未被清除

java - 添加 Web 界面来访问应用程序日志

java - 来自 Maven 依赖项的 Spring Boot RestController 不起作用

java - 终止线程池中的线程

java - Intellij 使用另一个类的数组创建组合框

java - 如何使用 firebase 搜索查询结果项实现 OnClick 项

java - 为什么我的 OSGI 示例不会在 bundle 启动时打印 "Hello World"?

log4j - 右对齐 Log4j 模式布局中的复合/复合表达式?