0

現在、Restlet を使用して Web サービスを作成しており、log4j の前に slf4j でログを記録しています。現在、ファイルにログを記録するための標準の log4j アペンダーを用意しています。私がやろうとしていたことは、カスタム Appender を使用して、HTTP 応答にログ出力を含めることです。

私が見ている問題は、デフォルトではアペンダーが作成中のリクエストのコンテキストにアクセスできないことです。理論的には、非同期アペンダーが実行される前にリクエストが終了する可能性があるため、これは理にかなっています。おそらく Appender を同期させ、ログ呼び出しで Response オブジェクトを渡すことによって、これが可能かどうかについてはまだ興味があります。log4j がこれをサポートする方法が見つかりません。logback のような別のフレームワークはありますか? パフォーマンスへの影響があるため、必ずしもこの方法を最終的に使用するわけではありませんが、それでも興味があります。

参考までに、私の現在の回避策は、応答にエントリを追加し、標準のログ記録のために slf4j メソッドを呼び出すカスタム ログ メソッドです。これの欠点は、カスタム メソッドを使用する必要があることです。また、自分が制御するコードのログ エントリしか取得しません (使用しているライブラリは、Appenders のみを使用しており、Response にログが記録されません)。

4

1 に答える 1

0

ほとんどの Appender 操作は非同期では発生しません。slf4j がその式をどのように変更するかはわかりませんが、特定のオブジェクトを LogEvent にフォーマットする方法を知っている Appender を構築することは確かにできます。アペンダーに到着すると、リクエストコンテキストは変更されないため、非同期性は実際には問題になりません-参照を保持するだけで十分です。

Log4Jコードの外でリクエストのコンテキストにアクセスするにはどうすればよいですか?

おそらく、ロギング目的でコンテキストを特別に処理する方法を知っているカスタムアペンダーを使用して、これを解決するでしょう。

于 2010-11-03T01:12:21.340 に答える