log4jの警告「ロガーのためのアペンダーが見つかりませんでした」を修正してください。log4jシステムを正しく初期化してください。
これを読んでいるなら、あなたはlog4jフレームワークを使用していて、以下のエラーメッセージを受け取っているはずです。
log4j:WARN No appenders could be found for logger
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See https://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Log4jのアペンダーが見つからない警告は、スタンドアロンアプリケーションのコンソールや、TomcatやJBossのようなサーブレットコンテナで実行されているWebアプリケーションのサーバーログに表示されます。log4jの警告「アペンダーが見つかりません」は、いくつかの理由が考えられます。一般的な理由とその対処方法を見てみましょう。
log4j.xml または log4j.properties ファイルがクラスパスにありません
これは最も一般的な理由です。log4jフレームワークは、アプリケーションのクラスパスにあるlog4j.xmlまたはlog4j.propertiesファイルを探します。Mavenベースのアプリケーションを持っている場合は、ソースフォルダーを作成し、そこに設定ファイルを置くことができます。以下の画像に示したように。
- log4jの設定ファイル名は何か異なる
Log4jは標準のファイル名を探しますので、あなたのlog4j設定ファイル名がmyapp-log4j.xmlまたはmyapp-log4j.propertiesの場合、log4jは自動的にそれを読み込むことができず、標準の警告メッセージが表示されます。スタンドアロンのJavaアプリケーションでは、使用する前にmainメソッド内で配置することにより、簡単に修正できます。例えば;
/**
* method to init log4j configurations, should be called first before using logging
*/
private static void init() {
DOMConfigurator.configure("myapp-log4j.xml");
// OR for property file, should use any one of these
//PropertyConfigurator.configure("myapp-log4j.properties");
}
しかし、ウェブアプリケーションではこの単純なアプローチを使用することはできません。なぜなら、設定ファイルがWEB-INF/classesディレクトリの中にあるからです。この設定は、以下のコードに示されているようにServletContextListenerを通じて行うことができます。
public final class Log4jInitListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent paramServletContextEvent) {
}
public void contextInitialized(ServletContextEvent servletContext) {
String webAppPath = servletContext.getServletContext().getRealPath("/");
String log4jFilePath = webAppPath + "WEB-INF/classes/myapp-log4j.xml";
DOMConfigurator.configure(log4jFilePath);
System.out.println("initialized log4j configuration from file:"+log4jFilePath);
}
}
別のアプローチは、次のようにjavaオプションを通じてlog4j.configurationシステムプロパティを設定することです。
-Dlog4j.configuration=file:///path/to/your/myapp-log4j.xml
Log4jフレームワークは、ファイル拡張子に基づいてDOMConfiguratorまたはPropertyConfiguratorを使用するのに十分にスマートです。それだけです、これらの初期の問題を把握すれば、log4jは使いやすいです。参照:
- Apache log4j デフォルト初期化手順
- スタンドアロンおよびウェブアプリケーションのためのLog4jチュートリアル

