デフォルトの初期化のためにjava.util.logging.config.fileをロードします

StackOverflow https://stackoverflow.com/questions/805701

質問

アプリケーションの起動時にカスタム 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ではまったく説明されていません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top