Apache Tomcat 6 で Eclipse 動的 Web プロジェクトを実行することで、この問題の解決策を見つけることができました。Spring では、コンテキストにアクセスしてリソースをロードするためのより洗練された方法があるかもしれません。
2 つの基本的な手順
(1) log4j.properties ファイルを war ファイルの「class ディレクトリ」に取得します。
(2) 現在のコンテキストから log4j プロパティ ファイルを読み取ります。これを行う最善の方法は、現在のスレッドのコンテキストにアクセスし、そこから作業することです。
上記の最初のステップでは、Eclipse ビルド プロセスを変更して追加のディレクトリを追加します。このディレクトリは最終的に war ファイルの WEB-INF/classes ディレクトリにロードされます。具体的には....
(1) Eclipse のプロジェクト エクスプローラーでプロジェクトを右クリックし、[新規] -> [フォルダー] を選択します。フォルダには任意の名前を付けることができますが、この場合の標準は「resources」です。新しいフォルダーは、プロジェクトのルート レベルに表示されます。
(2) log4j.properties ファイルをこの新しいフォルダーに移動します。
(3) 再度プロジェクトを右クリックし、'Build-Path'->'Configure Build Path' を選択します。[ソース] タブを選択します。「フォルダを追加」ボタンをクリックします。上記の手順 (1) で作成した新しいフォルダーを参照して見つけます。[OK] を選択します。
(4) Eclipse プロジェクト エクスプローラー ビューに戻ると、フォルダーが「Java リソース」領域に移動したことに注意してください (つまり、Eclipse プレゼンテーションの抽象化により、もはやルートにはありません)。
(5) プロジェクトをクリーンビルドします。
(6) .properties ファイルが war ファイルの WEB-INF/classes に存在することを検証するには、war ファイルを簡単な場所にエクスポートし ([プロジェクト] -> [エクスポート] -> [War ファイル] を右クリック)、内容をチェックアウトします。log4j.properties ファイルが WEB-INF/classes に表示されることに注意してください。
上記の 2 番目のステップでは、コンテキストにアクセスしてファイルを読み取ります。ファイルを読み取ろうとしている場所に次のコードを追加します。これはwarファイルのコンテキストからこれを読み取ることに注意してください。したがって、warファイルがサーバーからサーバーに移動すると、これは「機能するはず」です。
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
PropertyConfigurator.configure(classLoader.getResourceAsStream("log4j.properties") );