すでに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>
それがlog4j.propertiesファイル全体である場合、実際にロガーを作成することはないように見えます。次のような行が必要です。
log4j.rootLogger=debug,A1
クラスパスの正しい場所に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アペンダーを追加すると、この苦情は消えます。
log4j.properties
がクラスパスに存在しない場合、このエラーが発生する可能性があります。
つまり、log4j.properties
をsrcフォルダーに移動し、出力をbinフォルダーに設定する必要があります。これにより、実行時にlog4j.properties
がbinフォルダーから読み取られ、エラーが簡単に解決されます。
Log4jがファイル「log4j.properties」または「log4j.xml」をどこにも見つけられない場合、この警告が表示されます。
または、ログ構成ファイルがロードされる前に、私がしたことを実行してロガーを定義することもできます。これは彼らが言うようになります:「馬の前にカートを置く」。
コード内:
public static Logger logger = Logger.getLogger("RbReport");
...後で
PropertyConfigurator.configure(l4j);
logger = Logger.getLogger("RbReport");
修正は、構成のロード後にロガーを初期化することでした。
オタクにとっては、「Pデカッティングb4 d馬」です。
スタンドアロン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);
それでも問題が解決しない場合は、アーカイブの名前を確認します。正確に「log4j.properties」または「log4j.xml」(大文字と小文字を区別)であり、「Alain O'Dea」のヒントに従ってください。私は同じエラーを受け取っていましたが、これらの変更を行った後、すべてがうまく動作します。ちょうど魅力のように:-)。お役に立てれば。
私の場合、解決策は簡単でした。 web.xml
で何も宣言する必要はありません。
プロジェクトはWebアプリケーションであるため、構成ファイルは展開後にWEB-INF/classes
に配置する必要があります。そのためには、Javaリソースフォルダー(src/main/resources
)を作成することをお勧めします(最適な方法)。別のアプローチは、src/main/Java
に設定ファイルを置くことです。
構成ファイル名に注意してください。 XMLを使用している場合、ファイル名はlog4j.xml
、そうでない場合はlog4j.properties
です。
これらの行を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
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>
OK、私は多くの答えといくつかの非常に正しいことがわかります。しかし、私の問題を解決するものはありませんでした。私の場合の問題は、UNIXファイルシステムのパーミッションに、rootが所有するサーバーで編集しているlog4j.propertiesファイルがあったことです。ルートのみが読み取り可能です。しかし、デフォルトでLinuxシステムでTomcatがユーザーTomcatとして実行されるため、私がデプロイしていたWebアプリケーションはTomcatにファイルを読み取ることができませんでした。お役に立てれば。そのため、ソリューションはlog4j.propertiesファイルが存在するディレクトリで「chown Tomcat:tomcat log4j.properties」と入力していました。
同じ問題があった。同じ構成設定と同じ警告メッセージ。私のために働いたのは:エントリの順序を変更する
順序が重要だと思う。