0

osgiアプリケーションがありkaraf、バンドルjar内にロギングプロパティを設定して、ソースのロギング構成を保持したいと考えています(現在はにありますkaraf/etc/org.ops4j.pax.logging.cfg

更新:実際、現在はKaraf CM管理サービスにログ構成を保持しています。リリースごとに、ログの小さな変更を行うために運用チームに特別な指示を書き込む必要があるため、問題があります。さらに、複数のカラフノード(〜10)があり、それぞれに対してこれらのアクションを繰り返すことは、複雑でエラーが発生しやすいタスクです。確かにCellar、各karafノードにインストールすることはできますが、osgi envが複雑になり、サポートが必要になるため、ソースで構成を保持するための最も簡単な方法です。

私は、すべての依存関係(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は、ConfigurationAdminServiceを介してその構成を受け取ります。したがって、任意のバンドルからその構成を更新できます。再梱包は必要ありません。

于 2012-11-16T08:06:26.437 に答える
0

適切に指定された場所 (たとえば、/configuration/configuration.json の JSON ファイル) に構成データを含むバンドルを作成するだけです。次に、バンドルが変更されたときにこのデータを読み取り、構成管理者を更新するエクステンダーを作成します。

私はそのようなエクステンダを書きました。http://jpm4j.org/#!/p/osgi/aQute.configurer?tab=readme

ソース コードは JAR に含まれています

于 2013-11-18T10:51:39.423 に答える