VM パラメータとして設定する必要がないように、実行時に Java util ログ設定ファイルを設定しようとしています。しかし、これはうまくいきません。構成を再読み込みしようとすると、ログはまったく無効になります。
次のコード スニペットを参照してください。
package test;
import java.io.FileInputStream;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;
public class A {
private static final Logger LOGGER= Logger.getLogger(A.class.getName());
public static void main(String[] args) throws Exception {
System.out.println("--- start");
LOGGER.log(Level.SEVERE, "SEVERE 1");
LOGGER.log(Level.FINEST, "FINEST 1");
LogManager.getLogManager().readConfiguration();
LOGGER.log(Level.SEVERE, "SEVERE 2");
LOGGER.log(Level.FINEST, "FINEST 2");
LogManager.getLogManager().readConfiguration(new FileInputStream("/tmp/logging.properties"));
LOGGER.log(Level.SEVERE, "SEVERE 3");
LOGGER.log(Level.FINEST, "FINEST 3");
System.out.println("--- end");
}
}
これは、VM 引数なしでクラスを実行した場合の出力です。
--- start
09.11.2012 09:59:25 test.A main
SCHWERWIEGEND: SEVERE 1
09.11.2012 09:59:25 test.A main
SCHWERWIEGEND: SEVERE 2
--- end
ご覧のとおり、SEVERE レベルのみがログに記録されます。これは、JRE の logging.properties のデフォルトであるためです。電話LogManager#readConfiguration()
しても何も変わりません。しかし、logging.properties から構成を読み取ろうとすると、まったく何も記録されません。プロパティLogManager#readConfiguration(InputStream)
の呼び出しまたは設定と の呼び出しに違いはありません。java.util.logging.config.file
LogManager#readConfiguration()
VM プロパティで同じコードを実行すると、次の出力が表示されます-Djava.util.logging.config.file=/tmp/logging.properties
。
--- start
2012-11-09 10:03:44.0838 SEVERE [test.A#main()] - SEVERE 1
2012-11-09 10:03:44.0843 FINEST [test.A#main()] - FINEST 1
--- end
ご覧のとおり、SEVERE レベルと FINEST レベルの両方がログに記録され、それらは異なる形式でログに記録されます。両方とも私のカスタムで指定されていますlogging.properties
。LogManager#readConfiguration()
しかし、 !を呼び出した後、ここでロギングが停止します。これは上記の例とは異なり、私には理解できません。また、上記の例と同様に、呼び出しLogManager#readConfiguration(InputStream)
は機能しません。
それで、問題は何ですか?javadoc設定によると、実行時に java.util.logging.config.file プロパティが機能するはずです。また、両方の readConfiguration() メソッドが期待どおりに機能するはずです。それで、問題は何ですか?