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

时间:2013-02-05 15:59:14

标签: 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仍然作为捆绑包安装。有没有人知道如何在一个包中嵌入slf4j-api以防止它使用logback提供的导出的org.slf4j.impl?

感谢您的帮助,

布赖恩

P.S。完整的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>

1 个答案:

答案 0 :(得分:2)

我建议使用Pax-Logging,它为您提供了记录所需的一切。只有“缺点”,取决于你如何看待它,它由std配置。 log4j属性文件,因为它使用ConfigurationAdmin服务。除此之外,它可以为您提供各种不同的登录框架,log4j,slf4j,jul等...

Pax-Logging