java - 如何在 OSGI 中包含 slf4j-api、logback 和 slf4j.impl 的自定义实现?

标签 java osgi slf4j logback

我之前使用 slf4j-api、logback-core 和 logback-classic 包实现了 OSGI 日志记录到文件。

我现在想在单独的包中拦截日志调用(以在网页 servlet 中显示它们)。本教程位于this blog建议构建 org.slf4j.impl 的自定义实现,以将消息传递到日志服务。 (这非常有效!)

我遇到的问题是,我还想使用 logback 将日志消息保存到文件中,而我们的 org.slf4j.impl 自定义实现是 OSGI 中的一个 bundle ,阻止使用 org.slf4j.impl 的 logback 实现.

我认为这可能是因为在教程中 org.slf4j.impl 和 slf4j-api 的自定义实现作为依赖项嵌入,而不是作为 bundle 安装。但是当我尝试使用

<Embed-Dependency>slf4j.api_1.7.2.jar, logbackadapter.jar;scope=compile|runtime;inline=false</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>

Slf4j-api 仍然作为 bundle 安装。有谁知道如何将 slf4j-api 嵌入到包中以防止它使用 logback 提供的导出的 org.slf4j.impl ?

感谢您的帮助,

布莱恩

附:完整的pom元素是:

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>1.4.3</version>
    <extensions>true</extensions>


   <configuration>
      <instructions>
        <Bundle-SymbolicName>${bundle.symbolicName}</Bundle-SymbolicName>
        <Bundle-Version>${pom.version}</Bundle-Version>
        <Export-Package></Export-Package>
        <Private-Package>${bundle.namespace}.internal.*</Private-Package>
        <Embed-Dependency>slf4j.api_1.7.2.jar;logbackadapter.jar;scope=compile|runtime;inline=true</Embed-Dependency>
        <Embed-Transitive>true</Embed-Transitive>
      </instructions>
   </configuraiton>
</plugin>

依赖元素是:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.2</version>
    <scope>compile</scope>
</dependency>

最佳答案

我建议使用 Pax-Logging,它为您提供日志记录所需的一切。只是“缺点”,看你怎么看,它是由std配置的。 log4j 属性文件,因为它为此使用 ConfigurationAdmin 服务。除此之外,它还可以帮助您使用各种不同的登录框架,log4j、slf4j、jul 等...

Pax-Logging

关于java - 如何在 OSGI 中包含 slf4j-api、logback 和 slf4j.impl 的自定义实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14711604/

相关文章:

java - SLF4J MDC 的替代方案

连接到公共(public) ip 地址的 Java 套接字

java - 正则表达式用问号替换逗号分隔的单词

java - 用于桌面应用程序的 Apache Felix

java - Pax-import-bundle 和 Spring DM 包

java - 为每条日志消息添加自定义值

java - 检查字符串是否等价的查询

java - 如何将构造函数参数分配给成员

osgi - 当以编程方式启动 bundle 时,是否也应该启动依赖项?

java - 在日志消息中引用 MDC 变量,而不是使用 Slf4j 和 Log4j 的模式