2

java.util.logging のプロパティ ファイルを使用し、パッケージの下のすべてのクラスをログに記録したい:

aaa.bbb.ccc.*

通常の方法 (つまり、info、fine、finer) ですが、class

aaa.bbb.ccc.ddd.MyClass

独自のログ ファイル「My Class.log」で、レベルを細かく設定します。

構成は、プロパティ ファイルを介してのみ行う必要があります。これはどのように見えるでしょうか?

さまざまな方法 (さまざまなハンドラーなど) を試しましたが、成功しませんでした: 両方のログ ファイルに書き込まれてもうまくいきませんでした。

問題をより具体的にするために-私が試した設定:

handler.performance.class=com.logging.handler.FileHandler
handler.performance.file=${LOGGING_ROOT}/performance.log
handler.performance.level=FINE

handler.fine.class=com.logging.handler.FileHandler
handler.fine.file=${LOGGING_ROOT}/finer.log
handler.fine.level=FINE

handler.async.class=com.logging.handler.AsyncBufferHandler
handler.async.level=ALL
handler.async.targets=fine

handler.asyncperf.class=com.logging.handler.AsyncBufferHandler
handler.asyncperf.level=ALL
handler.asyncperf.targets=performance

com.myapp.handlers=async,console
com.myapp.useParentHandlers=false

com.myapp.common.logging.handlers=asyncperf
com.myapp.common.logging.useParentHandlers=false

この別のパフォーマンス ログに記録したいクラスは、com.myapp.common.logging... の下にあります。

4

3 に答える 3

4

解決策が見つかりました-それは間違った初期化でした:

ロガーは次のように初期化する必要があります。

Logger.getLogger(MyClass.class.getName())

次に、構成:

com.myapp.common.logging.MyClass.handlers=asyncperf
com.myapp.common.logging.MyClass.useParentHandlers=false

このクラスのすべてのログメッセージを、必要に応じて指定された別のファイルに記録します。

于 2012-06-01T11:44:06.920 に答える
1

2 つのターゲット ファイルに対して 2 つのファイル アペンダーを定義する

最初のアペンダーを使用するルート ロガーを 1 つ定義する

他のアペンダーを使用するために、特別なクラスの 2 番目のロガーを定義します。

メッセージを両方のファイルではなく一方のファイルに送信するために、ロガーの加算性を false に設定します。

于 2012-05-31T09:35:42.133 に答える
0

2 つのデフォルト FileHandler を構成できず、そのうちの 1 つだけを構成できるため、問題があると思います。そのため、FileHandler の個人用サブクラスを実装して、別のハンドラーとして構成してみてください。ロガーを個別のクラス用に構成できるのか、パッケージのみに構成できるのか覚えていないので、ハンドラーを のパッケージにも構成してみてくださいMyClass

于 2012-05-31T10:28:58.803 に答える