1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

jarファイルにまとめたJavaプロジェクトの中で、log4jの設定ファイルを読み込む方法メモ

Last updated at Posted at 2019-05-07

概要

log4jを用いてログ出力をしているプログラムをjarファイルにまとめたところ、log4jの設定ファイルであるlog4j.xmlがうまく読み込まれなくなりました。

プロジェクトの構成は、こんな感じです。

├ src
  └ foo 
     └ foo.java <= メインのプログラム
└ resources
  └ log4j.xml <= log4jの設定ファイル

失敗例

メインのプログラムのコンストラクタの中で、以下のように設定ファイルを読み込みました。

foo.java
import org.apache.log4j.xml.DOMConfigurator;

public class foo {
    public foo () {
        DOMConfigurator.configure("log4j.xml");
    }
}

ファイル名log4j.xmlを指定することで、Eclipse上でテストしたときはうまく読み込まれるものの、このプロジェクトをjarファイル化して動かしたときには、ファイルが見つからない旨のエラーが出て失敗します。

失敗した原因

プロジェクトをjarファイルにしてほかのプログラムから呼び出したときに、そのプログラムの起動ディレクトリにファイルlog4j.xmlがないか探してしまうため、うまく見つからなかったようです。

そのため、ファイル名のみを指定するのではなく、ファイルまでの絶対パスを指定するようにします。

解決策

コンストラクタを以下のように書き換えることで絶対パス指定ができるようになり、jarファイルにプロジェクトをまとめてもうまく設定ファイルが読み込まれるようになります。

foo.java
	public foo () {
		ClassLoader loader = Thread.currentThread().getContextClassLoader();
		DOMConfigurator.configure(loader.getResource("log4j.xml"));
	}

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?