4

私はOSGiと宣言型サービス(DS)を使用しており、現在、ロギングを適切に処理する方法を考えています。私はとにかくDSを使用しているので、OSGiサービス大要で指定されたLogServiceを必須のサービス参照として使用するのは自然なことのようです。私はネットのekkesコーナーnogunnersのブログでたくさん読んでいますが、まだ何かがはっきりしていません。

さまざまなサービスコンポーネント(またはファクタリングされたコンポーネントを使用する場合はさまざまなサービスコンポーネントインスタンス)を適切に区別するにはどうすればよいですか?

Logbackを使用したLogListenerの初心者の実装を見ると、彼はそれらを区別するためにbundlecontextからBundle-Idを使用しています。これまでのところわかりました。しかし、サービスコンポーネントをどのように区別しますか?LogServiceオブジェクトには当然BundleContextへの参照が含まれていますが、(LogServiceインターフェイスを見ると)ServiceReferenceはユーザー(実際に何かをログに記録するユーザー)自身が指定する必要がありますか?これは私には壊れやすいようです。フレームワークがBundleContextを提供するのに、なぜこれを提供できないのですか?

そして、私がそれに取り組んでいる間、なぜOSGi仕様logger.log(LogService.LOG_INFO,...)は準標準logger.info(...), logger.warn(..)などの代わりに冗長を使用するのですか?それには特別な理由がありますか?

4

1 に答える 1

5

コンポーネントIDをログに記録する標準的な方法はありません。これをメッセージに埋め込む必要があります。

OSGiログサービスは14年前のものです...すでに非常に多くのロギングシステムが存在していたため、アップグレードしないことにしました。

http://team.ops4j.org/wiki/display/paxlogging/Pax+Loggingを見てください。これらは、人気のあるロガーをOSGiと統合しています(両方の方法)。

于 2012-05-10T06:15:49.603 に答える