2016-01-28 6 views
6

私は、特定のハンドラを設定し、それをルートロガーに関連付け、複数のアプリケーションで使用する予定のカスタムログ設定クラスを作成しています。私は実際のプログラムコードがそのハンドラを削除し、別のものをインストールすることに懸念しています。ハンドルが削除されたことをハンドラに認識させることはできますか?

ハンドラが特定のロガーから削除されたことを検出する方法や、ロガーが関連が変更されたことを報告する方法はありますか?

私の唯一の他の選択肢は、定期的にルートロガーのハンドラをポーリングし、このハンドラを再接続しますスレッドを持つことである

答えて

0

非常に醜いであるあなたは特別な処理を行うためにremoveHandler()をオーバーライドするカスタムLoggerを作成することができますroot loggerの代わりに必要なログを記録します。

+0

残念ながら、作成できるハンドラとロギング設定ファイルのうち、ロガーを制御することはできません:( – Uri

2

ハンドラが特定のロガーから削除されたことを検出する方法や、ロガーが関連が変更されたことを報告する方法はありますか?

Loggerのサブクラスを作成するには、カスタムLogManagerを作成する必要があります。一部の環境では、特定のログマネージャーが動作しない可能性があります。

しかし、あなたが試すことができるいくつかのハックなものがあります。ロガー・ハンドラを変更

  1. は伐採許可が必要です。ロギング制御が要求されたときに、他のスレッドがアクセスできないようにするか、またはコールバックを発生させるカスタムSecurityManagerを作成するSecurityManagerの下で実行します。

  2. あなたはLogger.removeHandlerはHandler.equals(Object)を呼び出すに依存しているという事実を使用することができ、このこと性の高い実装固有の脆弱を乗り越えることができれば。カスタムハンドラ実装でequalsをオーバーライドし、Throwable.getStackTrace()を使用して、removeHandlerからequalsが呼び出されたかどうかを確認するフレームを調べます。それが真であれば、単にfalseを返します。

私の唯一の他の選択肢は、定期的にルートロガーのハンドラをポーリングし

は非常に醜いのための準備をしなさい、非常に醜いですこのハンドラを、再接続されますスレッドを持つことです。

+0

この回答は私を震えました。 –

+0

@IngoBürkプレイ時の細かいハッカーを示す警告が追加されました。 – jmehrens

+0

フェアリー、私はダウンボートを削除します –

関連する問題