0

我们有osgi应用程序,karaf并希望在 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 以解决它们并不是一个好方法。

出了什么问题或如何构建一个包含所有日志依赖项的单个包?

4

2 回答 2

0

实际上,我认为没有必要创建这样的捆绑包。Pax Logging通过 Configuration Admin Service 接收其配置。因此,您可以从任何捆绑包中更新该配置。无需重新包装。

于 2012-11-16T08:06:26.437 回答
0

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

我写了这样一个扩展器,你可以找到它http://jpm4j.org/#!/p/osgi/aQute.configurer?tab=readme

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

于 2013-11-18T10:51:39.423 回答