2017-10-13 5 views
0

私はslf4jの後ろにログバックを使用しており、org.slf4j.LoggerインスタンスからOutputStreamリファレンスを取得する方法を知りたいと考えています。ユースケースは、ShrinkwrapのArchive.writeTo(OutputStream, ...)メソッドです。slf4jロガーからOutputStreamリファレンスを取得するにはどうすればよいですか?

この参照の必要性を回避するには、ByteArrayOutputStreamを作成し、それを渡してコンテンツをロガーに書き込むことができます。そして私はそれがstdout and stderr can be redirected to a logger in generalであることを認識しています。それは言われている、私は質問への直接の答えを探しています。何もない場合は、slf4jにメカニズムを追加することをお勧めします。

私はslf4j API 1.7.5とlogback 1.2.2を使用しています。

+0

大量のバイナリデータを受け取り、ログレベルやメッセージの境界を明確にするAPIを追加することは意味がないと思います。メッセージをログに記録するアプリケーションとしては、意味のある個々のログメッセージ(レベル、「通常サイズのメッセージ」、またはいくつかのマップされたコンテキスト属性)を生成するのはあなた次第です。 OutputStreamはバイナリデータのダムシンクに過ぎません。 – Thilo

+0

OutputStreamリファレンスを 'Logger。[level]'の引数としてhttps://jira.qos.ch/browse/LBCLASSIC-118 –

+0

で提案しましたが、これはあなたが提案したように動作する必要があります:ロガーからのOutputStream OutputStreamをロガーに渡すと、それが書き込むことができるすべてのことができます。 OutputStreamから読み込む方法はありません。 – Thilo

答えて

0

これはまだ行指向のテキストデータ(*)であると仮定すると、OutputStream実装を提供して、書いたものをLoggerインスタンスに転送することができます。個々のメッセージの開始と終了を把握するには、何らかの方法が必要です。内容を見て、ログレベルなどを割り当てることさえできます。

(*)そうでない場合、ロギングフレームワークに送信するのは大変なことです。

+0

これはあなたが好きではなかった回避策(またはリンクされたスレッドhttps://stackoverflow.com/a/11187462/14955のこの回答)に非常に似ています。 – Thilo

+1

OutputStream.writeは1つの 'int'引数しか持たず、行指向データへの変換を扱うサブクラスが必要な他のメソッドはありません。 –

関連する問題