0

log4jを使用してログファイルのjsf-facelet(xhtml)ページのEL(式言語)エラーをログに記録する方法があるのだろうか?私は次のロガーを試しましたが、無駄でした。

 <logger name="javax.faces">
    <level value="WARN" />
    <appender-ref ref="appLogFile"/>
 </logger>
 <logger name="javax.servlet">
    <level value="WARN" />
    <appender-ref ref="appLogFile"/>
 </logger>
 <logger name="org.apache">
    <level value="WARN" />
    <appender-ref ref="appLogFile"/>
 </logger>

実際、私はJSF ELなどでいくつかの簡単な数学的計算を行っており#{intA/intB} #{intA-intB-intC}、顧客がWebアプリケーションを閲覧しているときにエラーが発生した場合はログに記録したいと思います。

ヒントは大歓迎です:-)

4

1 に答える 1

0

log4j プロパティまたは XML に追加できます。

# log4j.properties

log4j.rootLogger=DEBUG,myapp

log4j.appender.myapp=org.apache.log4j.RollingFileAppender
log4j.appender.myapp.file=/var/log/appLogFile.log
log4j.appender.myapp.maxFileSize=10MB
log4j.appender.myapp.maxBackupIndex=10
log4j.appender.myapp.layout=org.apache.log4j.PatternLayout
log4j.appender.myapp.layout.ConversionPattern=%5p | %d | %F:%L | %m%n

log4j.logger.javax.faces=DEBUG
log4j.logger.javax.el=ERROR
log4j.logger.com.sun.faces=DEBUG

 <logger name="javax.faces">
    <level value="WARN" />
    <appender-ref ref="appLogFile"/>
 </logger>

  <logger name="javax.el">
    <level value="ERROR" />
    <appender-ref ref="appLogFile"/>
 </logger>

また

エラーページを使いたい場合は、

 <error-page>
        <exception-type>javax.el.ELException</exception-type>
        <location>/elError.xhtml</location>
    </error-page>

elError.xhtml は、

<h:panelGrid>
    <h:outputText value="Exception Occured:" />
        <h:outputText  value="#{ErrorBean.message}" />  
</h:panelGrid>

エラーを取得し、データベースまたは log4j にログを記録する ManagedBean を作成します。

@ManagedBean
        public class ErrorBean{

            public String getMessage() {

                FacesContext context = FacesContext.getCurrentInstance();
                Map requestMap = context.getExternalContext().getRequestMap();
                Throwable exception = (Throwable) 
                               requestMap.get("javax.servlet.error.exception");

                // Log the error in database or log4j

                return ex.getMessage();
            }
        }
于 2013-03-07T18:26:32.910 に答える