[解決済み] 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 でテストしましたが、今のところ正常に動作しています。
どうでしょうか?
関連
-
StringBuilderが投げるArrayIndexOutOfBoundsExceptionの探索
-
Uncaught ReferenceError: は定義されていません。
-
無効な文字定数
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
Javaがリソースリークに遭遇した:'input'が閉じない 解決方法
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
Java JDKのダイナミックプロキシ(AOP)の使用と実装の原理分析
-
switch case文のcaseの後の列挙定数は列挙型なし
-
htmlとwordの相互変換の実装(画像あり)
-
ApiModel と @ApiModelProperty の使用法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
型に解決できない エラー解決
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
無効なメソッド宣言
-
Junitのユニットテストはjava.lang.Testを報告します。
-
SocketException java.netの4つの例外解決策。
-
keytool error: java.io.FileNotFoundException: cacerts (アクセス拒否されました。)
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
ecplise プロンプトが表示されます。"選択したものは起動できません。" "最近の起動はありません。"
-
Java:未解決コンパイル問題の解決方法
-
CAS 5.1.8でhttpをサポートし、認証されていない認可サービスエラーのプロンプトが表示される問題を解決した。