5

アプリケーションで Log4J AsyncAppender を使用していますが、アプリケーションが終了すると、AsyncAppender のスレッドはどうなるのでしょうか? スレッドを手動で終了する必要がありますか?それともログ メッセージの一部が失われることを心配せずに、スレッドを忘れてアプリケーションを終了できますか?

4

3 に答える 3

1

AsyncAppender のソースを見ると、イベントの書き込みを処理するデーモン スレッド (行 112 ~ 117) が作成されます。作成close()者は、JVM がシャットダウンする前にキューに入れられたメッセージが確実に書き出されるように、明示的にアペンダーを呼び出すことを期待しています。

dispatcher = new Thread(new Dispatcher(this, buffer, discardMap, appenders));

// It is the user's responsibility to close appenders before
// exiting.
dispatcher.setDaemon(true);

スレッドをデーモンとして設定すると、アプリケーションのコアが終了すると JVM が実行されなくなります。ただし、これは、アプリケーションがアペンダーに通知せずにシャットダウンした場合、キュー内のメッセージが失われることも意味します。

于 2012-10-10T14:41:12.400 に答える
0

AsyncAppender がアプリケーション内で実行されているスレッドである場合、アプリケーションを閉じると閉じられます (アプリケーションとは、jvm の現在のインスタンスを意味します)。それがあなたの質問かどうかはわかりませんが、

于 2012-10-10T14:14:16.333 に答える