2012-02-10 3 views
1

私はJSFアプリケーションを開発していますが、デフォルトのロガーではなくlog4jを使用したいと思います。JSFをlog4jにログする方法を教えてください

デフォルトのロガーは標準出力に記録されているようです。私はアプリケーションを実行するために埋め込みのTomcatを使用するいくつかの統合テストを行っており、ログ出力はWindows上のコマンドlieから実行するとメモリ不足エラーを引き起こします。だから、私がやってみたいのは、log4jを使用することです。それはとにかにアプリケーションのために選ばれたロガーです。そして、ほとんどのJSFログをフィルタリングします。

私は、必要なことをすべて提示するビットをいくつか見つけました。適切なlog4j.propertiesを持つlog4j JARをクラスパスに置き、JARを記録するコモンズを除外します。私はそれを試してみましたが、ではなく、の仕事があります。

これは私のweb.xmlです:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns="http://java.sun.com/xml/ns/javaee" 
      xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
      metadata-complete="true" 
      id="WebApp_ID" 
      version="3.0"> 

    <display-name>Embedded Tomcar</display-name> 
    <welcome-file-list> 
    <welcome-file>faces/index.xhtml</welcome-file> 
    </welcome-file-list> 

    <servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 

    <context-param> 
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> 
    <param-value>resources.application</param-value> 
    </context-param> 

    <context-param> 
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>client</param-value> 
    </context-param> 

    <context-param> 
    <param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name> 
    <param-value>true</param-value> 
    </context-param> 

    <context-param> 
    <param-name>org.apache.myfaces.PRETTY_HTML</param-name> 
    <param-value>true</param-value> 
    </context-param> 

    <context-param> 
    <param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name> 
    <param-value>false</param-value> 
    </context-param> 

    <context-param> 
    <param-name>org.apache.myfaces.AUTO_SCROLL</param-name> 
    <param-value>true</param-value> 
    </context-param> 

    <listener> 
    <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class> 
    </listener> 

</web-app> 

私のプロトタイプへのコードはgithubの上にもある:https://github.com/pjgrenyer/EmbeddedTomcat

+0

「私はそれを試しても機能します。」 - スペルの間違い? – oers

+0

Doh!はい、それを見つけていただきありがとうございます。私はそれを修正しました。 –

答えて

0

あなたがリダイレクトすることができますロギングファサードのためのアプリケーションの設定を検討する必要がありますLog4jおよびApache Commonsからのすべてのアプリケーションログ単一のソースを介したログ。サードパーティーのjarがApache Commonsを使用することに決めた場合、リバースエンジニアリングやFOSSコードのカスタマイズは、Log4jを直接使用することにはなりません。

最も一般的に配布されているJavaライブラリは、不必要な依存関係を望まないため、Log4jなどのロギング実装ではなく、Logging Facadeを通じてログに記録されますが、IMHOは常に混乱と苦痛を与えています。 Apache Commonsは実際にはLogging Facadeですが、それは難しいので、なぜあなたがそれから離れたいのか理解しています。

SLF4Jをチェックしてください。最近のHibernateのバージョンではこの依存関係が必要です。そのため、Hibernateを使用している場合はすでにクラスパスにこれがあります。

http://www.slf4j.org/

+0

アプリケーションの私の部分は問題なくlog4jに書き込んでいます。 JSFがlog4jに書き込んでいます。問題があります。私はこのページを見つけました: http://www.slf4j.org/legacy.html そしてjcl-over-slf4j.jarの代わりにcommons-logging-1.1.1.jarをうまく置き換えました。しかし、クラスパスにslf4j-log4j12-1.6.4.jarを入れても、出力をlog4jにリダイレクトすることはできません。 –