1. ホーム
  2. java

[解決済み] プロパティファイルを使ってjavaのロギングを設定するには?(java.util.logging)

2023-05-11 20:43:40

質問

私は愚かな java のロギングの問題を抱えています。私のアプリ構成ファイルからロギング構成を読み込みますが、ファイルを読み込んだ後、何も記録しません (追加のアプリケーション構成を除いて、あなたがネット上で見つける例のようにかなり似ています - これを削除しても、助けにはなりません)。初期化中..."のログラインは問題なく表示されますが、"アプリの起動やその他のメッセージはコンソールに記録されず、ログファイル自体も作成されません。私はここで何を見逃しているのでしょうか?

Logger のコードは次のようなものです。

...
Logger log = Logger.getLogger("myApp");
log.setLevel(Level.ALL);
log.info("initializing - trying to load configuration file ...");

Properties preferences = new Properties();
try {
    FileInputStream configFile = new FileInputStream("/path/to/app.properties");
    preferences.load(configFile);
    LogManager.getLogManager().readConfiguration(configFile);
} catch (IOException ex)
{
    System.out.println("WARNING: Could not open configuration file");
    System.out.println("WARNING: Logging not configured (console output only)");
}
log.info("starting myApp");
...

そして、これが設定ファイルです。

appconfig1 = foo
appconfig2 = bar

# Logging
handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level = ALL

# File Logging
java.util.logging.FileHandler.pattern = %h/myApp.log
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.level = INFO

# Console Logging
java.util.logging.ConsoleHandler.level = ALL

どのように解決するのですか?

さて、最初の直感はこちらです。

handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level = ALL

Java の prop ファイルパーサはそれほど賢くないので、これを処理できるかどうかわからない。 でも、もう一度ドキュメントを見てきます...。

その間に、試してみてください。

handlers = java.util.logging.FileHandler
java.util.logging.ConsoleHandler.level = ALL


更新

いや、もっとコーヒーが必要だったんだ。 気にしないでください。

もっと考えている間に、以下のメソッドを使うことができることに注意してください。 プロパティ のメソッドを使って、プロップファイルをロードし、プリントすることができることに注意してください:それは、javaがそのファイルで何を読むと考えているかを見るために、最小限のプログラムを書く価値があるかもしれません。


別の更新

この行は

    FileInputStream configFile = new FileInputStream("/path/to/app.properties"));

には余分な末尾括弧があります。 これはコンパイルできません。 あなたが考えているクラスファイルを使用していることを確認してください。