1. ホーム
  2. java

[解決済み] Log4j、相対パスを使用するWebアプリの設定

2023-08-20 17:20:02

質問

私は、WinまたはLinuxマシンのいずれかにデプロイされなければならないjavaウェブアプリを持っています。私は今、ログのためにlog4jを追加したいと思い、私はすべての展開でファイルパスを変更したくないので、ログファイルのために相対パスを使用したいと思います。コンテナは、おそらくTomcatになるでしょうが、必ずしもそうではありません。

これを行うための最良の方法は何でしょうか?

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

最終的にこの方法でやりました。

以下のような処理を行うServletContextListenerを追加しました。

public void contextInitialized(ServletContextEvent event) {
    ServletContext context = event.getServletContext();
    System.setProperty("rootPath", context.getRealPath("/"));
}

次に、log4j.propertiesファイルに。

log4j.appender.file.File=${rootPath}WEB-INF/logs/MyLog.log

この方法でそれを行うことによって、Log4jは、あなたが"rootPath"システムプロパティが設定される前にそれを使用しない限り、正しいフォルダに書き込まれます。これは、ServletContextListener自体からそれを使用できないことを意味しますが、アプリの他のどこからでもそれを使用できるはずです。

コンテナ固有のシステムプロパティに依存せず、OS 固有のパスの問題にも影響されないので、すべての Web コンテナと OS で動作するはずです。 Tomcat と Orion ウェブコンテナで、Windows と Linux でテストしましたが、今のところ正常に動作しています。

どうでしょうか?