web-dev-qa-db-ja.com

log4j:WARN web.xmlでロガーのアペンダーが見つかりませんでした

すでにweb.xmlにlog4jConfigLocationを配置しましたが、まだ次の警告が表示されます。

log4j:WARN No appenders could be found for logger ⤦
    ⤥ (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.

私は何を取りこぼしたか?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "Java.Sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/applicationContext.xml
        </param-value>
    </context-param>
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/classes/log4j.properties</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.util.Log4jConfigListener
        </listener-class>
    </listener>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>suara2</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>suara2</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>
77
cometta

それがlog4j.propertiesファイル全体である場合、実際にロガーを作成することはないように見えます。次のような行が必要です。

log4j.rootLogger=debug,A1
43
CodeGoat

クラスパスの正しい場所にlog4j.propertiesがありましたが、それを直接使用したものでこの警告が表示されました。 commons-loggingを介してlog4jを使用するコードは、何らかの理由で問題ないようです。

あなたが持っている場合:

log4j.rootLogger=WARN

次のように変更します。

log4j.rootLogger=WARN, console
log4j.appender.console=org.Apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.Apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n

http://logging.Apache.org/log4j/1.2/manual.html によると:

ルートロガーは匿名ですが、Logger.getRootLogger()メソッドでアクセスできます。ルートにアタッチされるデフォルトのアペンダーはありません。

これが意味することは、ロギングを行うためにルートロガーにアペンダー、アペンダーを指定する必要があるということです。

RootLoggerにconsoleアペンダーを追加すると、この苦情は消えます。

29
Alain O'Dea

log4j.propertiesがクラスパスに存在しない場合、このエラーが発生する可能性があります。

つまり、log4j.propertiesをsrcフォルダーに移動し、出力をbinフォルダーに設定する必要があります。これにより、実行時にlog4j.propertiesがbinフォルダーから読み取られ、エラーが簡単に解決されます。

18
prabhat

Log4jがファイル「log4j.properties」または「log4j.xml」をどこにも見つけられない場合、この警告が表示されます。

7
Aaron Digulla

または、ログ構成ファイルがロードされる前に、私がしたことを実行してロガーを定義することもできます。これは彼らが言うようになります:「馬の前にカートを置く」。

コード内:

public static Logger logger = Logger.getLogger("RbReport");

...後で

PropertyConfigurator.configure(l4j);
logger = Logger.getLogger("RbReport");

修正は、構成のロード後にロガーを初期化することでした。

オタクにとっては、「Pデカッティングb4 d馬」です。

7
MikeF

スタンドアロンlog4jアプリケーション用に構成する場合は、BasicConfiguratorを使用できます。このソリューションは、Spring環境などのWebアプリケーションには適していません。

書く必要があります

BasicConfigurator.configure();

または

ServletContext sc = config.getServletContext();
String log4jLocation = config.getInitParameter("log4j-properties-location");
String webAppPath = sc.getRealPath("/");
String log4jProp = webAppPath + log4jLocation;
PropertyConfigurator.configure(log4jProp);
5
GARIMA KILLEDAR

それでも問題が解決しない場合は、アーカイブの名前を確認します。正確に「log4j.properties」または「log4j.xml」(大文字と小文字を区別)であり、「Alain O'Dea」のヒントに従ってください。私は同じエラーを受け取っていましたが、これらの変更を行った後、すべてがうまく動作します。ちょうど魅力のように:-)。お役に立てれば。

4
Marcelo Daniel

私の場合、解決策は簡単でした。 web.xmlで何も宣言する必要はありません。

プロジェクトはWebアプリケーションであるため、構成ファイルは展開後にWEB-INF/classesに配置する必要があります。そのためには、Javaリソースフォルダー(src/main/resources)を作成することをお勧めします(最適な方法)。別のアプローチは、src/main/Javaに設定ファイルを置くことです。

構成ファイル名に注意してください。 XMLを使用している場合、ファイル名はlog4j.xml、そうでない場合はlog4j.propertiesです。

3
jbatista

これらの行をweb.xmlの先頭に配置します

    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

   <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:/main/resources/log4j.xml</param-value>
   </context-param>

詳細については、このリンクを参照してください: http://mariemjabloun.blogspot.com/2014/04/resolved-log4jwarn-no-appenders-could.html

2
MariemJab

Web.xmlにlog4jExposeWebAppRoot-> falseを追加します。それは私と一緒に動作します:)

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>path/log4j.properties</param-value>
</context-param>
<context-param>
    <param-name>log4jExposeWebAppRoot</param-name>
    <param-value>false</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
1
Innet

OK、私は多くの答えといくつかの非常に正しいことがわかります。しかし、私の問題を解決するものはありませんでした。私の場合の問題は、UNIXファイルシステムのパーミッションに、rootが所有するサーバーで編集しているlog4j.propertiesファイルがあったことです。ルートのみが読み取り可能です。しかし、デフォルトでLinuxシステムでTomcatがユーザーTomcatとして実行されるため、私がデプロイしていたWebアプリケーションはTomcatにファイルを読み取ることができませんでした。お役に立てれば。そのため、ソリューションはlog4j.propertiesファイルが存在するディレクトリで「chown Tomcat:tomcat log4j.properties」と入力していました。

1
M The Developer

同じ問題があった。同じ構成設定と同じ警告メッセージ。私のために働いたのは:エントリの順序を変更する

  • ログ構成のエントリ[コンテキストパラメータとリスナー]をファイルの上部[applicationContext.xmlのエントリの前]に配置し、機能しました。

順序が重要だと思う。

0