티스토리 툴바


블로그 이미지
마이맵

공지사항

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

calendar

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

log4sql에 외부 Logger 적용

2009/11/29 01:28 | Posted by 마이맵
이전에는 PreparedStatement를 를 디버깅 하기 위해 s6spy란 라이브러리를 사용했다.
약간의 버그?로 너무 많은 로그를 남겨 결과물을 필터링 해서 디버깅을 하였다.
그런데 얼마전에 log4sql이란 라이브러리를 만났다.
^^ 넘 맘에 든다. 깔끔하고 정돈된 Sql로그.. 

쿼리를 Console로 출력하고
디버깅 레벨이나
특정 패키지만을 로깅 할 수 도 있다
그리고 몇가지 기능들이 더 있다.

설정방법
 . jar파일을 classpath에 놓는다.
 . driver명을 변경한다.
   ex) Oracle기준 :  core.log.jdbc.driver.OracleDriver
이것으로 끝.
로그가 Console로 출력된다.

개인적인 편의를 위해 2가지를 추가.
 . 로그를 파일로 저장하기
 . 로그 메세지만 출력하기( stackTrace를 출력하지 않음)

위의 추가기능을 위해 아래와 같이 3개의 파일을 변경.
 . core.log.logger.SL.java
 . ReloadableConfiguration.java
 . log4sql.properties

내용은
 . commmon-logging 추가
 . 외부 로거와 console로그 추가 
 . log4sql.properties파일의 위치를 "/"(root)로 변경

로그를 설정하는것은 기존방식대로 하고 로그를 출력하는것을 추가해서 사용하면 됩니다.
log4j.xml
    <category name="core.log" >
        <level value="[DEBUG| INFO| WARNING| FATAL| ERROR]" />
    </category>


원본
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 

정보
발생시키는 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;
    InvocationTargetException ite = (InvocationTargetException)   
                                                                         ute.getUndeclaredThrowable();
    SQLException se = (SQLException) ite.getTargetException();
    if (se.getErrorCode() == ????) {
      rsltTotal =....;
    }
  } catch (Exception e2) {}
}
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'Java > Other Lib' 카테고리의 다른 글

log4sql에 외부 Logger 적용  (2) 2009/11/29
이전 1 ... 14 15 16 17 18 19 20 21 22 ... 56 다음