2012-01-26 177 views
0

我已經閱讀了許多不同的文章/主題,但尚未確定在我的JSP中執行Apache Commons日誌記錄的最佳方式。Apache Commons日誌記錄JSP

提供一些背景下,我加入了改進的錯誤邏輯來使用Spring 2。所以,現在我們有一個被使用Spring 2和Spring 3

因此,而不是使用Spring創建的控制器,最初開發的應用程序MVC 3在控制器級別的異常處理,我認爲最好在web.xml中配置一個JSP,以記錄所有控制器的所有傳播異常。

令人驚訝的是,我沒有看到使用標記庫在JSP內執行日誌記錄的簡單方法。 Apache Commons似乎有一個用於日誌記錄的退役標籤庫,但它基於log4j而不是Apache Commons Logging本身。

所以,相反,我執行我的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

把原始的Java代碼放在一個JSP文件中確實很尷尬。至於你的具體功能要求,

日誌都將會傳播例外所有控制器

常見的做法是使用爲這是對/*映射一個Filter

E.g.

@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; 
     } 
    } 

    // ... 
} 

請注意,您不需要自己構建堆棧跟蹤。如果您將異常作爲第二個參數傳遞,則記錄器已經這樣做了。那麼,你可以使用其他Throwable#printStackTrace(PrintWriter)

+0

從來沒有想過的過濾器,絕對看起來更整潔。當我嘗試logger.error(「未處理的異常被捕獲:」+異常)它只是打印NullPointerException ....也許我犯了一些錯誤。對於printStackTrace()我不想將它打印到屏幕上,只需記錄它,我將如何工作? – DJ180

+0

可能是Commons Logger的配置問題。對不起,因爲我從來沒有用過它,所以不能詳細說明。 – BalusC