- PR -

エラー : log4j.properties ファイルが見つかりません。

1
投稿者投稿内容
its7
会議室デビュー日: 2006/06/17
投稿数: 4
投稿日時: 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 で開発する場合は、これが普通なのでしょうか?

よろしくお願いします。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-06-17 14:13
URLも指定できるので、
コード:
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource("log4j.properties");
PropertyConfigurator.configure(url);


というような感じでも可能です。

クラスローダからURLを取得するときは、
クラスパスルートを起点とした相対パスとなります。
its7
会議室デビュー日: 2006/06/17
投稿数: 4
投稿日時: 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/ からの相対パスで指定できるというように
理解したのですが、誤っているでしょうか。


ご助言をいただけると幸いです。
よろしくお願いします。

かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-06-19 19:27
最初のソースと次に提示されたソースが違いませんか?
PropertyConfigurator.configure("log4j.properties");
を解決する方法を書いたまでです。
私が提示したコードをよく読んでみてください。

何がしたいのかよくわかりませんが、
PropertyConfigurator.configure("log4j.properties"); を実行しないなら、
クラスパスルートにlog4j.propertiesを配置すれば勝手に読み込まれますし、
実行するなら、私が書いた方法で解決できると思います。
its7
会議室デビュー日: 2006/06/17
投稿数: 4
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)