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



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

我现在想在一个单独的捆绑包中截取日志调用(在网页servlet中显示它们)。本博客中的本教程建议构建org.slf4j.impl的自定义实现,以便将消息传递给日志服务。(效果很好!)

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

我认为这可能是因为在教程中,org.slf4j.impl和slf4japi的自定义实现是作为依赖项嵌入的,而不是作为捆绑包安装的。然而,当我尝试时

<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吗?

谢谢你的帮助,

Brian

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>

我建议使用Pax日志记录,它为您提供了日志记录所需的一切。只有"缺点",取决于您如何看待它,它是由std.log4j属性文件配置的,因为它使用ConfigurationAdmin服务。此外,它还可以帮助您使用各种不同的loggin框架,log4j,slf4j,jul等。

Pax日志

最新更新