通过slf4j作为单独的osgi捆绑包进行logback



我们在karaf中有osgi应用程序,并希望在bundle jar中具有日志记录属性,以保持源中的日志记录配置(目前它们在karaf/etc/org.ops4j.pax.logging.cfg中)

更新:事实上,现在我们在Karaf CM管理服务中保留日志配置,这是一个问题,因为在每个版本中,我们都应该向我们的操作团队编写特殊的说明,以进行任何微小的日志更改。此外,我们有多个karaf节点(~10),对每个节点重复这些操作是一项复杂且容易出错的任务。当然,我们可以将所有Cellar插入到每个karaf节点,但这会使osgi环境复杂化,并需要一些支持,所以最简单的方法就是在源中保留配置

我已经在谷歌上搜索了创建一个单独的捆绑包的最简单方法。在里面做所有依赖项(logback、slf4j、config)的实际日志记录,然后从中导出org.slf4

我试过这个pom.xml:

<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<unpackBundle>true</unpackBundle>
<instructions>
<Embed-Dependency>*;groupId=!junit|org.springframework|log4j|javax.jms|javax.mail</Embed-Dependency>
<Embed-Transitive>false</Embed-Transitive>
<Embed-Directory>target/dependency</Embed-Directory>
<Embed-StripGroup>true</Embed-StripGroup>
<Export-Package>org.slf4j</Export-Package>
<Import-Package>
*
</Import-Package>
</instructions>
</configuration>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<excludeGroupIds>junit,org.springframework,log4j</excludeGroupIds>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>com.springsource.ch.qos.logback.classic</artifactId>
<version>0.9.15</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>com.springsource.ch.qos.logback.core</artifactId>
<version>0.9.15</version>
</dependency>

但它使捆绑显示了许多额外的依赖性,如javax.mail/jms等:

Import-Package: javax.jms,javax.mail,javax.mail.internet,javax.management,javax.naming,javax.servlet,javax.servlet.http,javax.sql,javax.xml.parsers,org.codehaus.janino,org.slf4j;version="1.6",org.xml.sax,org.xml.sax.helpers,sun.reflect

当然,将所有这些不必要的东西部署到karaf以解决它们不是一个好方法。

有什么问题,或者如何构建一个包含所有日志依赖项的捆绑包?

实际上,我认为没有必要创建这样的捆绑包。Pax日志记录通过配置管理服务接收其配置。因此,您可以从任何捆绑包中更新该配置。无需重新包装。

只需在指定的位置创建一个包含配置数据的捆绑包(例如/configuration/configuration.JSON中的JSON文件)。然后制作一个扩展程序,在捆绑包更改时读取这些数据并更新配置管理员。

我写了这样一个扩展程序,你可以找到它http://jpm4j.org/#/p/osgi/aQute.configurater?tab=自述

源代码包含在JAR中:http://repo.jpm4j.org/rest/bundle/51C83986E4B06EF1574B84F7/c9256d19f155d699ed0d18559bbb80441ac68ff7

最新更新