0

これに関するさまざまな記事/スレッドを読みましたが、JSPでApacheCommonsロギングを実行するための最良の方法をまだ決定していません。

コンテキストを提供するために、元々Spring 2を使用して開発されたアプリケーションに改善されたエラーロジックを追加しています。これで、Spring2とSpring3を使用して作成されたコントローラーができました。

したがって、コントローラーレベルでSpring MVC 3の例外処理を使用するのではなく、すべてのコントローラーのすべての伝播された例外をログに記録するJSPをweb.xmlで構成するのが最善だと思います。

驚いたことに、タグライブラリを使用して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>

だから私の質問はこれです....このロギングを実行するためのより良い方法はありますか?上記は機能しますが、一般的なタスクである必要があるものに対して不必要に厄介なようです

4

1 に答える 1

1

生の Java コードを JSP ファイルに入れるのは実に厄介です。具体的な機能要件については、

すべてのコントローラの伝播されたすべての例外をログに記録します

一般的な方法は、 に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)

于 2012-01-26T18:24:40.643 に答える