1

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

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

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

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

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

谢谢你的帮助,

布赖恩

ps 完整的 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>
4

1 回答 1

2

我建议使用 Pax-Logging,这为您提供了日志记录所需的一切。只有“缺点”,取决于您如何看待它,它是由 std. log4j 属性文件,因为它为此使用了 ConfigurationAdmin 服务。除此之外,它对各种不同的登录框架、log4j、slf4j、jul 等都有很大帮助......

Pax 记录

于 2013-02-06T08:31:32.697 回答