에러에 대해서 급하게 정리 해봄
 web.xml에 http error와 web container error에 대해서 다음과 같이 기술하고
	<!-- errorPage 설정 -->
   <error-page>
      <exception-type>java.lang.Exception</exception-type>
      <location>/WEB-INF/view/error/http/exception.jsp</location>
   </error-page>
   <error-page>
      <error-code>404</error-code>
      <location>/WEB-INF/view/error/http/404.jsp</location>
    </error-page>
spring mvc 설정에 다음과 같이 exception 발생 시 exception.jsp파일이 호출되게 한 후
	<!--  Exception 처리 -->
	<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<property name="exceptionMappings">
			<props>
				<prop key="java.lang.Exception">/error/exception/exception</prop>
			</props>
		</property>
	</bean>
 
해당 jsp 파일에 다음의 내용을 추가해서 로그를 찍으면 좀더 유지보수에 좋지 않을지...
<%@ page import="org.apache.log4j.Logger" %>
<%
	Logger logger = Logger.getLogger("spring exception");
	// client의 cookie나 request Uri 정보등등을 로그에 남기기
	String newLine = System.getProperty("line.separator");
	StringBuffer sb = new StringBuffer()
		.append("requestURL[").append(request.getRequestURL()).append("]").append(newLine)
		.append("pathInfo[").append(request.getPathInfo()).append("],").append(newLine)
		.append("method[").append(request.getMethod()).append("],").append(newLine)
		.append("queryString[").append(request.getQueryString()).append("],").append(newLine)
		.append("remoteHost[").append(request.getRemoteHost()).append("],").append(newLine)
		.append("remoteAddr[").append(request.getRemoteAddr()).append("],").append(newLine)
		.append("servletPath[").append(request.getServletPath()).append("],").append(newLine);
	
    // http header값도 로그에 추가
	java.util.Enumeration names = request.getHeaderNames();
    String headerName;
    while (names.hasMoreElements()) {
    	headerName = (String)names.nextElement();
    	sb.append(headerName).append("[").append(request.getHeader(headerName)).append("],").append(newLine);
    }
    sb.append("serverName[").append(request.getServerName()).append("]");
	logger.error(sb.toString());
	
	// Exception 정보도 로그에 추가
	if (request.getAttribute("javax.servlet.error.exception") == null) {
		logger.debug("request.getAttribute('javax.servlet.error.exception') is null");
		return; // Return from the JSP servelet handler.
	}
	// 	javax.servlet.error.status_code: 에러 상태 코드를 말해 주는 정수이다.
	// 	javax.servlet.error.exception_type: 에러가 생기게 된 예외 형을 지적해 주는 클래스 인스턴스이다. 
	// 	javax.servlet.error.message: 예외 메시지를 말해주는 스트링이며, 예외 컨스트럭터로 보내어 진다.
	// 	javax.servlet.error.exception: 실제 예외가 없어지면 버릴 수 있는 객체이다. 
	// 	javax.servlet.error.request_uri: 문제를 일으킨 리소스의 URI를 말해주는 스트링이다.
	Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception");
	logger.error("spring exception", throwable);
%>
결과 화면
17:33:02,150 ERROR spring exception:101 - requestURL[http://localhost:8080/board2/WEB-INF/view/error/exception/exception.jsp]
pathInfo[null],
method[GET],
queryString[null],
remoteHost[0:0:0:0:0:0:0:1],
remoteAddr[0:0:0:0:0:0:0:1],
servletPath[/WEB-INF/view/error/exception/exception.jsp],
accept[*/*],
accept-language[ko-KR],
user-agent[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)],
accept-encoding[gzip, deflate],
host[localhost:8080],
connection[Keep-Alive],
cookie[JSESSIONID=4218FE934DC460160394497F33DEE71E],
serverName[localhost] 
 
/WEB-INF/view/error/http/exception.jsp 파일에는 다음의 부분만 추가 및 수정하고...
response.setStatus(javax.servlet.http.HttpServletResponse.SC_OK);
Logger logger = Logger.getLogger("http exception"); 
 
asp.net mvc 에서는 다음과 같이 global.asax.cs에 넣고 ...
         protected void Application_Error(Object sender, EventArgs e)
        {
            if (Config.RedirectCustomErrorPage)
            {
                var exception = Server.GetLastError();
                var httpException = exception as HttpException;
                Response.Clear();
                Server.ClearError();
                var routeData = new RouteData();
                routeData.Values["controller"] = "Errors";
                routeData.Values["action"] = "ServerError";
                routeData.Values["exception"] = exception;
                Response.StatusCode = 500;
                if (httpException != null)
                {
                    /* 
                     * 100 Series : Informational 
                     * 200 Series : Success 
                     * 300 Series : Redirection
                     * 400 Series : Client Error
                     * 500 Series : Server Error
                     */
                    Response.StatusCode = httpException.GetHttpCode();
                    if (400 <= Response.StatusCode && Response.StatusCode < 500)
                        routeData.Values["action"] = "HttpError"; //400대 에러가 들어온다
                    else
                        routeData.Values["action"] = "ServerError"; // 500대 에러가 들어온다
                }
                IController errorController = new ErrorController();
                var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
                errorController.Execute(rc);
            }
            else
            {
                System.Text.StringBuilder sbErrMsg = new System.Text.StringBuilder();
                sbErrMsg.Append("[URL : (");
                sbErrMsg.Append(Request.Url.ToString());
                sbErrMsg.Append(")][URLRefferrer : (");
                sbErrMsg.Append(Request.UrlReferrer.ToString());
                sbErrMsg.Append(")][PATH_INFO : (");
                sbErrMsg.Append(Request.ServerVariables["PATH_INFO"].ToString());
                sbErrMsg.Append(")][REQUEST_METHOD : (");
                sbErrMsg.Append(Request.ServerVariables["REQUEST_METHOD"].ToString());
                sbErrMsg.Append(")][QUERY_STRING : (");
                sbErrMsg.Append(Request.ServerVariables["QUERY_STRING"].ToString());
                sbErrMsg.Append(")][HTTP_COOKIE : (");
                sbErrMsg.Append(Request.ServerVariables["HTTP_COOKIE"].ToString());
                sbErrMsg.Append(")][UserHostName : (");
                sbErrMsg.Append(Request.UserHostName.ToString());
                sbErrMsg.Append(")][HTTP_USER_AGENT : (");
                sbErrMsg.Append(Request.ServerVariables["HTTP_USER_AGENT"].ToString());
                sbErrMsg.Append(")][HTTP_ACCEPT_LANGUAGE : (");
                sbErrMsg.Append(Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"].ToString());
                sbErrMsg.Append(")][SERVER_NAME : (");
                sbErrMsg.Append(Request.ServerVariables["SERVER_NAME"].ToString());
                sbErrMsg.Append(")]");
                Exception exErr = Server.GetLastError();
                Logger.GetInstance().Log.Error("(Global.Application_Error) Application Error, ["
                    + sbErrMsg.ToString() + "]", exErr);
            }
        }