4

OSGi では、ロギング フロントエンドと実際の出力が分離されています。

したがって、LogServiceを使用しても、たとえばコンソールに何かが書き込まれるわけではありません。これは、LogReaderServiceが担当するものです。

私の現在のランタイムでは、出力を処理する LogReaderService-Implementation をもたらすorg.apache.felix.logを追加しています。しかし、コンソールにはまだ何も表示されません...他のバンドルからの他の多くのものにもかかわらず.

次のステップでは、LogServiceReader によって呼び出される独自の LogListener を作成しました。この記事のコードを使用してアクティベーターをデバッグし、リスナーが追加されているかどうかを確認しました。まだ出力はありません。

最後に、Felix のプロパティを確認し、felix.log.level=3 (情報) を設定しましたが、やはり出力はありません。レベルを Info に設定しているにもかかわらず、まだ多くの DEBUG-Information を表示できることをさらに疑問に思っていたことは何ですか?

16:47:46.311 [qtp1593165620-27] DEBUG org.eclipse.jetty.http.HttpParser

さまざまな構成プロパティを使用するさまざまなロギング戦略が実施されているようです。たとえば、pax-logging-service (クラシック ロギング アプローチを使用) をランタイムに追加した後、出力を確認できましたが、現在は felix-logging を使用したいと考えています。

Blueprint-Debug-Level を無効にする方法を説明してもらえますか? 仕様で指定されていなくても、標準コンソールの実装が必要です。

4

1 に答える 1

1

Christian Schneider と Balazs Zsoldos に感謝します。両方のコメントは非常に役に立ちました。

質問に答えるには:ここで Balazs の例に示すように、 ServiceTrackerCustomizerを提供する必要があります。すでに ConsoleLogListener を持っていたので、リスナーを TrackerCustomizer に登録するだけで十分でした。


私の現在のタスクは、OSGi を導入したい大規模なレガシー アプリケーションの移行に関するものであるため、log4j はすでに何百ものクラスで使用されており、おそらく LogService に変更することはないため、おそらくPax-Loggingを使用する方が理にかなっています。

Pax-Logging の出力は、プロパティーorg.ops4j.pax.logging.DefaultServiceLog.levelをINFOに設定して調整できます。

于 2015-03-06T11:51:50.610 に答える