- - PR -
エラー : log4j.properties ファイルが見つかりません。
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-06-17 12:51
Eclipse 3.1 で Webアプリを作成しています。
ログ出力に、log4j を使おうと試みているのですが、 log4j.properties ファイルが見つかりません。というエラーが発生します。 ----------------------------------------------------------- PropertyConfigurator.configure("log4j.properties"); を実行すると、下記のエラーが eclipse のコンソールに出力されます。 java.io.FileNotFoundException: log4j.properties (指定されたファイルが見つかりません。) ----------------------------------------------------------- ただし、エラーは発生しますが、ログは正常に出力されます。 ちなみに、PropertyConfigurator.configure("log4j.properties"); の ファイル名を絶対パスで記述するとエラーは発生しませんでした。 では、カレントディレクトリはどこになっているか調べてみると、 eclipse の実行ファイル (eclipse.exe) のある場所になっていました。 試しに、eclipse.exe と同じディレクトリに log4j.properties を置いたら 上記のエラーが発生しなくなりました。 なぜ、このような現象になるのでしょうか? eclipse で開発する場合は、これが普通なのでしょうか? よろしくお願いします。 | ||||
|
投稿日時: 2006-06-17 14:13
URLも指定できるので、
というような感じでも可能です。 クラスローダからURLを取得するときは、 クラスパスルートを起点とした相対パスとなります。 | ||||
|
投稿日時: 2006-06-19 16:33
かつのりさん、ありがとうございます。
クラスローダーを利用してみました。 log4j.properties を、WEB-INF/classes/log4j.properties の位置に置き、 下記を実行すると、ログを出力することができました。 ソース1 --------------------------------------------------- ClassLoader cl = this.getClass().getClassLoader(); cl.getResource("log4j.properties"); Logger logger = Logger.getLogger("sample"); logger.debug("output log."); ----------------------------------------------------------- 次に、log4j.properties をパッケージのディレクトリ、 WEB-INF/classes/testServlet/log4j.properties の位置に置き、 下記を実行すると、エラーが発生してしまいました。 ソース2 --------------------------------------------------- ClassLoader cl = this.getClass().getClassLoader(); cl.getResource("testServlet/log4j.properties"); Logger logger = Logger.getLogger("sample"); logger.debug("output log."); ----------------------------------------------------------- エラー ----------------------------------------------------- log4j:WARN No appenders could be found for logger (sample). log4j:WARN Please initialize the log4j system properly. ----------------------------------------------------------- ソース2の class ファイルは、 WEB-INF/classes/testServlet/Log.class にあります。 クラスローダで取得する場合は、 WEB-INF/classes/ からの相対パスで指定できるというように 理解したのですが、誤っているでしょうか。 ご助言をいただけると幸いです。 よろしくお願いします。 | ||||
|
投稿日時: 2006-06-19 19:27
最初のソースと次に提示されたソースが違いませんか?
PropertyConfigurator.configure("log4j.properties"); を解決する方法を書いたまでです。 私が提示したコードをよく読んでみてください。 何がしたいのかよくわかりませんが、 PropertyConfigurator.configure("log4j.properties"); を実行しないなら、 クラスパスルートにlog4j.propertiesを配置すれば勝手に読み込まれますし、 実行するなら、私が書いた方法で解決できると思います。 | ||||
|
投稿日時: 2006-06-20 17:03
す、すみません。
PropertyConfigurator.configure(url); を実行していませんでした… ----------------------------------------------------------- ClassLoader cl = this.getClass().getClassLoader(); URL url = cl.getResource("testServlet/log4j.properties"); PropertyConfigurator.configure(url); Logger logger = Logger.getLogger("sample"); logger.debug("output log."); ----------------------------------------------------------- WEB-INF/classes/testServlet/log4j.properties のファイルを読み込むことができ、ログも設定どおりに 出力することができました。 本当にお恥ずかしい… お手数をお掛けして済みませんでした。 |
1