2012-01-26 13 views
0

私はこれに関する多くの記事やスレッドを読んだことがありますが、JSPでApache Commonsのログを記録する最良の方法をまだ決定していません。いくつかのコンテキストを提供するApache CommonsのJSPでのログイン

、私は春の2を使用して独自に開発されたアプリケーションに改善されたエラー・ロジックを追加していだから今、私たちは春の2を使用して作成されたコントローラと春3

を持っているのではなく、春を使用してMVC 3のコントローラレベルでの例外処理では、web.xmlにJSPを設定して、すべてのコントローラに対してすべてのPropogated例外を記録するのが最善の方法だと思います。

驚いたことに、タグライブラリを使用してJSP内で簡単にロギングを実行する方法はありません。 Apache Commonsはロギングのために引退したタグライブラリを持っているようですが、これはApache Commons Logging自体とは対照的にlog4jに基づいています。だから、

、代わりに私は私のJSP内プログラムで、次の実行しています:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<%@ page import="org.apache.commons.logging.Log" %> 
<%@ page import="org.apache.commons.logging.LogFactory" %> 
<%@ page isErrorPage="true" %> 
<% Log logger = LogFactory.getLog(this.getClass()); %> 
<html> 
<head> 
</head> 
<body> 
    <% 
     StringBuilder stringBuilder = new StringBuilder("\n" + exception); 
     for(StackTraceElement element : exception.getStackTrace()) 
     { 
      stringBuilder.append("\n" + element.toString()); 
     } 
     logger.error("Unhandled exception caught: " + stringBuilder.toString()); 
    %> 
    <p>Text here</p> 
</body> 
</html> 

だから私の質問はこれですが....このロギングを実行するためのより良い方法はありますか?上記はうまくいくが、何が共通の作業であるべきなのか不必要に厄介なように思える。

答えて

1

JSPファイルに生のJavaコードを置くのは本当に面倒だ。あなたの具体的な機能要件、

ログのすべてのコントローラ

のためのすべてのpropogatedの例外に関しては一般的な方法は、/*上にマッピングされ、そのためにFilterを使用することです。

など。

@WebFilter("/*") 
public class ExceptionFilter implements Filter { 

    private Log logger = LogFactory.getLog(getClass()); 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     try { 
      chain.doFilter(request, response); 
     } catch (ServletException e) { 
      logger.error("Unhandled exception caught", e); 
      throw e; 
     } 
    } 

    // ... 
} 

スタックトレースを自分で作成する必要はありません。 2番目の引数として例外を渡すと、ロガーはすでにそれを行います。それでも、あなたは他の人の中でThrowable#printStackTrace(PrintWriter)を使っていました。

+0

フィルターは考えられませんでしたが、間違いなくきれいに見えます。私がlogger.errorを試したときに( "未処理の例外がキャッチされました:" +例外)、それはNullPointerExceptionを印刷しました....おそらく私は間違いを犯しました。 printStackTrace()の場合は、画面に出力するのではなく、単にログに記録したいのですが、どのように動作させるのですか? – DJ180

+0

Commons Loggerの設定に問題がある可能性があります。申し訳ありませんが、私はそれを使用したことがないので、詳細で行くことはできません。 – BalusC

関連する問題