ウェブサイト検索

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の警告「アペンダーが見つかりません」は、いくつかの理由が考えられます。一般的な理由とその対処方法を見てみましょう。

  1. log4j.xml または log4j.properties ファイルがクラスパスにありません

これは最も一般的な理由です。log4jフレームワークは、アプリケーションのクラスパスにあるlog4j.xmlまたはlog4j.propertiesファイルを探します。Mavenベースのアプリケーションを持っている場合は、ソースフォルダーを作成し、そこに設定ファイルを置くことができます。以下の画像に示したように。

  1. 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チュートリアル

関連記事: