이전에는 PreparedStatement를 를 디버깅 하기 위해 s6spy란 라이브러리를 사용했다.
약간의 버그?로 너무 많은 로그를 남겨 결과물을 필터링 해서 디버깅을 하였다.
그런데 얼마전에 log4sql이란 라이브러리를 만났다.
^^ 넘 맘에 든다. 깔끔하고 정돈된 Sql로그..
쿼리를 Console로 출력하고
디버깅 레벨이나
특정 패키지만을 로깅 할 수 도 있다
그리고 몇가지 기능들이 더 있다.
설정방법
. jar파일을 classpath에 놓는다.
. driver명을 변경한다.
ex) Oracle기준 : core.log.jdbc.driver.OracleDriver
이것으로 끝.
로그가 Console로 출력된다.
개인적인 편의를 위해 2가지를 추가.
위의 추가기능을 위해 아래와 같이 3개의 파일을 변경.
내용은
로그를 설정하는것은 기존방식대로 하고 로그를 출력하는것을 추가해서 사용하면 됩니다.
log4j.xml
버그
정보
약간의 버그?로 너무 많은 로그를 남겨 결과물을 필터링 해서 디버깅을 하였다.
그런데 얼마전에 log4sql이란 라이브러리를 만났다.
^^ 넘 맘에 든다. 깔끔하고 정돈된 Sql로그..
쿼리를 Console로 출력하고
디버깅 레벨이나
특정 패키지만을 로깅 할 수 도 있다
그리고 몇가지 기능들이 더 있다.
설정방법
. jar파일을 classpath에 놓는다.
. driver명을 변경한다.
ex) Oracle기준 : core.log.jdbc.driver.OracleDriver
이것으로 끝.
로그가 Console로 출력된다.
개인적인 편의를 위해 2가지를 추가.
. 로그를 파일로 저장하기
. 로그 메세지만 출력하기( stackTrace를 출력하지 않음)
. 로그 메세지만 출력하기( stackTrace를 출력하지 않음)
위의 추가기능을 위해 아래와 같이 3개의 파일을 변경.
. core.log.logger.SL.java
. ReloadableConfiguration.java
. log4sql.properties
. ReloadableConfiguration.java
. log4sql.properties
내용은
. commmon-logging 추가
. 외부 로거와 console로그 추가
. log4sql.properties파일의 위치를 "/"(root)로 변경
. 외부 로거와 console로그 추가
. log4sql.properties파일의 위치를 "/"(root)로 변경
로그를 설정하는것은 기존방식대로 하고 로그를 출력하는것을 추가해서 사용하면 됩니다.
log4j.xml
<category name="core.log" >
<level value="[DEBUG| INFO| WARNING| FATAL| ERROR]" />
</category>
<level value="[DEBUG| INFO| WARNING| FATAL| ERROR]" />
</category>
원본
http://sourceforge.net/projects/log4sql
svn co https://log4sql.svn.sourceforge.net/svnroot/log4sql log4sql
http://sourceforge.net/projects/log4sql
svn co https://log4sql.svn.sourceforge.net/svnroot/log4sql log4sql
변경파일
버그
1. SpringFramework에서 batchsqlupdate실행 시 에러 발생
BatchSqlUpdate batchUpdate
...
batchUpdate.flush()
2. 쿼리가 괄호문으로 되어있는 경우 에러 발생
(select ... from a) union (select ... from b)
==> select ... from a union select ... from b
BatchSqlUpdate batchUpdate
...
batchUpdate.flush()
2. 쿼리가 괄호문으로 되어있는 경우 에러 발생
(select ... from a) union (select ... from b)
==> select ... from a union select ... from b
정보
발생시키는 Exception타입이 변경됩니다.
스프링에서 (SQLException)...으로 받아 처리하였는데
이 라이브러리를 적용하니 UndeclaredThrowableException 으로 변경되네요
그래서 아래와 같이 변경했습니다.
if (e.getCause() instanceof SQLException) {
SQLException se = (SQLException) e.getCause();
if (se.getErrorCode() == ????) {rsltTotal = ...; }
} else if(e instanceof UndeclaredThrowableException) {
try {
UndeclaredThrowableException ute = (UndeclaredThrowableException) e;
스프링에서 (SQLException)...으로 받아 처리하였는데
이 라이브러리를 적용하니 UndeclaredThrowableException 으로 변경되네요
그래서 아래와 같이 변경했습니다.
if (e.getCause() instanceof SQLException) {
SQLException se = (SQLException) e.getCause();
if (se.getErrorCode() == ????) {rsltTotal = ...; }
} else if(e instanceof UndeclaredThrowableException) {
try {
UndeclaredThrowableException ute = (UndeclaredThrowableException) e;
InvocationTargetException ite = (InvocationTargetException)
ute.getUndeclaredThrowable();
SQLException se = (SQLException) ite.getTargetException();
if (se.getErrorCode() == ????) {
rsltTotal =....;
}
} catch (Exception e2) {}
}
ute.getUndeclaredThrowable();
SQLException se = (SQLException) ite.getTargetException();
if (se.getErrorCode() == ????) {
rsltTotal =....;
}
} catch (Exception e2) {}
}
'Java > Other Lib' 카테고리의 다른 글
| log4sql에 외부 Logger 적용 (2) | 2009/11/29 |
|---|
Comment 2

log4sql_modify.zip

