我以前使用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日志