1

以前、slf4j-api、logback-core、logback-classicバンドルを使用して、ファイルへのOSGIロギングを実装しました。

ここで、ログ呼び出しを別のバンドルでインターセプトしたいと思います(Webページサーブレットに表示するため)。このブログのこのチュートリアルでは、メッセージをログサービスに渡すためにorg.slf4j.implのカスタム実装を構築することを提案しました。(これはうまくいきました!)

私が抱えている問題は、ログバックを使用してログメッセージをファイルに保存したいということです。org.slf4j.implのカスタム実装はOSGIのバンドルであり、org.slf4j.implのログバック実装が使用されないようにします。

これは、チュートリアルで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で構成されています。これには ConfigurationAdmin Service が使用されるためです。それに加えて、あらゆる種類の異なるログイン フレームワーク、log4j、slf4j、jul などで大いに役立ちます...

Pax ロギング

于 2013-02-06T08:31:32.697 に答える