デフォルトの初期化のためにjava.util.logging.config.fileをロードします
-
03-07-2019 - |
質問
アプリケーションの起動時にカスタム log.properties
ファイルをロードしようとしています。
プロパティファイルはメインクラスと同じパッケージにあるため、 -Djava.util.logging.config.file = log.properties
コマンドラインパラメーターがプロパティファイルを取得するものと想定しましたロードされました。
ただし、プロパティファイルへの完全な絶対パスを指定した場合にのみ、プロパティが読み込まれます。相対パスの使用方法に関する提案はありますか?
解決
Javaロギングは、ハードディスク全体でファイルを検索しません。ファイルの検索方法は非常に単純なルールがあります。 2つのファイルが互いに属していることをJavaに認識させたいが、どこにもそう言わなかった。 Javaは、プロパティファイルとクラスがディスク上の同じフォルダにあることを除いて、クラスとの接続を認識しないため、ファイルを見つけることができません。
-Djava.util.logging.config.file = log.properties
は、ファイル log.properties
がJavaプロセスの現在のディレクトリ(これがかなりランダムにすることができます)。したがって、ここでは絶対パスを使用する必要があります。
別の解決策は、ファイル logging.properties
を $ JAVA_HOME / lib /
に移動することです(または、あるべきファイルを編集します)。その場合、システムプロパティを設定する必要はありません。
他のヒント
相対パスから java.util.logging
プロパティファイルを非常に簡単に動的にロードできます。これが、 Main
クラスの static {}
ブロック内に配置したものです。 logging.properties
ファイルを defaultパッケージ
に入れると、次のコードで非常に簡単にアクセスできます。
final InputStream inputStream = Main.class.getResourceAsStream("/logging.properties");
try
{
LogManager.getLogManager().readConfiguration(inputStream);
}
catch (final IOException e)
{
Logger.getAnonymousLogger().severe("Could not load default logging.properties file");
Logger.getAnonymousLogger().severe(e.getMessage());
}
utilロギングはクラスパスからロードされません。絶対パスが必要です。そのため、log4jのような他のロギングパッケージは設定がはるかに簡単で、absパスを取得するのが面倒なWebアプリに適しています。
これはjava.util.logging.LogManager docoではまったく説明されていません。