8

実行チェーンのある時点で特定レベルのメッセージのログ記録を停止するよう JVM に指示できるようにしたいと考えています。ある時点で、レベルのあるメッセージのみをログに記録したいSEVEREので、これを行うことを考えていました:

    for(Enumeration<String> loggerNames = logManager.getLoggerNames(); loggerNames.hasMoreElements();){
        String name = loggerNames.nextElement();
        Logger nextLogger = logManager.getLogger(name);
        if(nextLogger != null)
            nextLogger.setLevel(Level.SEVERE);
    }

同じロジックを達成するためのよりクリーンな方法はありますか?つまり、重大でない限りログへの印刷を停止するグローバル変数を設定しますか? コンソール出力 (テスト中) とライブ中のファイル出力を区別する必要があるため、ハンドラー (コンソールとファイル) でこれらのレベルを設定できる可能性がありますか?

4

3 に答える 3

7

私自身の質問に答える:

これはまさに私が必要としていたものです:

Handler[] handlers =
  Logger.getLogger( "" ).getHandlers();
for ( int index = 0; index < handlers.length; index++ ) {
  handlers[index].setLevel( Level.SEVERE);
}
于 2012-12-07T10:53:36.740 に答える
2

アプリケーション構成を動的に制御する一般的な方法は、JMX を使用することです。

jdk の一部である JConsole を使用すると、MBean を手動で制御できますが、プログラムでアクセスすることもできます。

このページで説明されているように、JMX を使用して MBean を制御できます。

于 2012-12-07T10:00:11.750 に答える
0

log4jを使用すると、ルートロガーのレベルを変更できます。

これはうまくいくかもしれません:

logManager.getLogger( "" ).setLevel(Level.SEVERE);

またはLogger.getParent()ルートロガーを見つけるために使用します

于 2012-12-07T10:41:49.067 に答える