2012-12-07 35 views
7

実行チェーンのある時点で特定レベルのメッセージのロギングを停止するようにJVMに指示したいと考えています。いくつかの時点で私は唯一SEVEREレベルでメッセージをログに記録したいので、私はこれを行うことを考えていた:Java - 動的にロギングレベルを変更する

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

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

+0

私はJavaロギングのプロパティファイルが必要だと思います。 これをチェックしてくださいhttp://www.javapractices.com/topic/TopicAction.do?Id=143 –

+1

いいえ、ダイナミックな変更を使用します – Bober02

答えて

6

を見つけるために、自分の質問に答える:これは私がまさに必要である

を:

Handler[] handlers = 
    Logger.getLogger("").getHandlers(); 
for (int index = 0; index < handlers.length; index++) { 
    handlers[index].setLevel(Level.SEVERE); 
} 
+0

それは私にとっても効果的です。この純粋なJavaのアプローチの利点は、ライブラリーがデフォルトレベルであまりにも多くのログを記録する(私はあなたにApache SSHDを見ている)ときには、私もグルーヴィーでそれを行うことができるということです。 –

0

アプリケーション設定を動的に制御するには、一般的な方法としてJMXを使用します。

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

this pageで説明されているように、JMXを使用してMBeanを制御できます。

0

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

これは動作可能性があります

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

またはLogger.getParentを(使用)ルートロガー

関連する問題