2017-08-31 13 views
0

デバッグモードが設定されていない場合、レベルをFINESTに設定しない限り、ログレベルをINFOに設定するアプリケーションがあります。java.util.loggingのプロパティファイルで設定された値をプログラムでオーバーライドすることはできますか?

プロパティファイル内のレベルを設定すると、logger.setLevel(Level.FINEST)を使用してプログラムからオーバーライドされません。プロパティファイルの.levelフィールドに何も設定しないと、デフォルトでINFOレベルが取られ、再びisDebugEnable()の場合は、FINESTを使用するようにオーバーライドすることはできません。

このレベルを条件に基づいて設定するにはどうすればよいですか?

try(InputStream configFile = getClass().getClassLoader().getResourceAsStream("logging.properties")) { 
     LogManager.getLogManager().readConfiguration(configFile); 
    } catch (IOException e) { 
     throw new IllegalStateException("Unable to load default logging properties.", e); 
    } 
if (isDebugEnabled()) { 
     logger.setLevel(Level.FINEST); 
    } else { 
     logger.setLevel(Level.INFO); 
    } 

次のように私の設定ファイルは次のとおりです。

handlers= java.util.logging.ConsoleHandler 
.level= INFO 

# default file output is in user's home directory. 
java.util.logging.FileHandler.pattern = %h/java%u.log 
java.util.logging.FileHandler.limit = 50000 
java.util.logging.FileHandler.count = 1 
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter 

# Enable console to set level to FINEST and above. 
java.util.logging.ConsoleHandler.level = FINEST 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 

従いますが、これを行うには良い方法があるかどうかを知りたいと、私が使用してこれを行うことができます。あなたはJVMの起動前にDEBUGオプションを設定している場合は、単にdebug.propertiesと呼ばれる第二logging.propertiesファイルをパッケージ化して、デバッグオプションをしたいときdebug.propertiesを指すようにjava.util.logging.config.fileを変更

ConsoleHandler consoleHandler = new ConsoleHandler(); 
setLogLevel(); 
consoleHandler.setLevel(Level.FINEST); 
logger.addHandler(new ConsoleHandler()); 
+0

[Java - 動的ロギングレベルの変更]の可能な複製(https://stackoverflow.com/questions/13760095/java-dynamically-change-logging-level) – Avinash

答えて

1

を(プロパティファイル使用している可能性があり)。

実行時にレベルを設定する必要がある場合は、readConfiguration not resetting all everything after boot of the JVMの問題が発生します。 JDK 8以前では、readConfigurationを呼び出してデフォルト値を入力し、壊れた動作を修正するコードを追加するだけです。ハンドラのレベルを設定するだけでよいので、そのコードを追加するだけです。

try(InputStream configFile = getClass().getClassLoader().getResourceAsStream("logging.properties")) { 
    LogManager.getLogManager().readConfiguration(configFile); 
} catch (IOException e) { 
    throw new IllegalStateException("Unable to load default logging properties.", e); 
} 

Level lvl; 
if (isDebugEnabled()) { 
    lvl = Level.FINEST; 
} else { 
    lvl = Level.INFO; 
} 
logger.setLevel(lvl); 
for(Handler h : logger.getHandlers()) { 
    h.setLevel(lvl); 
} 

JDK 9は、readConfiguration方法の破断現象を回避するであろうupdateConfiguration方法を提供します。

関連する問題