spring error stacktrace 에러 내용이 찍히지 않을때
[
에러가 발생하게 되면 보통 stacktrace 의 객체에 저장된 내용을 print 해서 문제를 파악하게 된다.
하지만 spring framework 에서 위와 같이 간단하게 표현되는 경우가 있다.
그 원인을 찾기 위해서 Controller 가 상속받은 클래스를 따라 올라가다 보니
MultiActionController 함수중에 Exception 이 발생할때 실행되는 놈이 있는데 그 함수가
아래와 같다.
protected Method getExceptionHandler(Throwable exception){
Class exceptionClass = exception.getClass();
if(logger.isDebugEnabled())
logger.debug("Trying to find handler for exception class [" + exceptionClass.getName() + "]");
Method handler;
for(handler = (Method)exceptionHandlerMap.get(exceptionClass);
handler == null && !exceptionClass.equals(java.lang.Throwable.class);
handler = (Method)exceptionHandlerMap.get(exceptionClass))
{
if(logger.isDebugEnabled())
logger.debug("Trying to find handler for exception superclass [" + exceptionClass.getName() + "]");
exceptionClass = exceptionClass.getSuperclass();
}
return handler;
}
내용을 보면 대충 알겠지만 logger.isDebugEnabled 일때 Trying to find handler 을 print 하는걸 볼수 있다.
이 옵션을 어떻게 바꿔야 될지 더 찾아봐야겠지만 당장은 MultiActionController 상속받아
클래스를 만든후 getExceptionHandler 오버로딩 해서 기능을 변경하는것이 편할것 같다.
방법은 exception 객체에서 StackTraceElement[] 배열을 가져온후 그내용을 StringBuffer
저장하여 log4j 로 출력하는 절차이다. 문자열을 구성한 로직은 일반적인 에러 출력형태를
취해서 print 한다. 다음은 오버로딩한 함수의 내용이다.
protected Method getExceptionHandler(Throwable exception){
StackTraceElement[] element = exception.getStackTrace();
StringBuffer errorBuff = new StringBuffer(exception.getMessage());
errorBuff.append("\n");
for (int i=0; i < element.length; i++){
errorBuff.append("\tat ").append(element[i]).append("\n");
}
log.debug(errorBuff.toString());
return super.getExceptionHandler(exception);
}
'자바(JAVA)' 카테고리의 다른 글
struct 에서 BeanUtils.populate Exception 이 날때 (0) | 2009.06.06 |
---|---|
local 컴퓨터 IP 정보, 호스트 이름 등을 가져오기 (0) | 2009.06.02 |
SOAP 통신에서 weblogic parsing error - jar 의 충돌 (0) | 2009.05.28 |
apache 에서 제공하는 Common Validator 사용하기 (1) | 2009.05.27 |
Locale format 정보을 이용해서 Date outputs 를 원하는 형태로 만들어보자 (0) | 2009.05.19 |
윈도우 OS 에서 돌아가고 있는 프로세스명을 자바로 넘겨받는 방법 (0) | 2009.05.17 |
log4j.additivity 옵션으로 중복출력 제외 시키기 (0) | 2009.02.21 |
메시지 규칙에 의해서 특정문자를 다른변수에 저장된 메시지로 치환하고 싶을때 (0) | 2009.02.21 |