log4jのWARN 「No appenders could be found for logger」の修正方法は、適切に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.
スタンドアロンアプリケーションでは、ログ4jのアペンダーが見つからないことによる警告はコンソールに表示されます。一方、TomcatやJBossなどのサーブレットコンテナで実行されるWebアプリケーションでは、この警告はサーバーログに表示されます。ログ4jのアペンダーが見つからない警告が表示される理由はいくつかありますが、一般的な原因と修正方法を見てみましょう。
- ログ4j.xmlまたはlog4j.propertiesファイルがクラスパスにありません。
これは最も一般的な理由ですが、log4jフレームワークはアプリケーションのクラスパス内にlog4j.xmlまたはlog4j.propertiesファイルを探します。Mavenベースのアプリケーションを使用している場合は、ソースフォルダを作成し、下の画像に示すように設定ファイルをそこに配置することができます。Webアプリケーションでlog4jを使用している場合、この設定ファイルはWEB-INF/classesディレクトリにありますので、それが存在しない場合はソースフォルダの設定が正しく行われているか確認してください。
- log4jの設定ファイル名は何か違うものです。
Log4jは標準のファイル名を探しますので、もしログ4jの設定ファイル名が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 Default Initialization Procedure
- Log4j Tutorial for Standalone and Web application