sql 로그 출력시 PreparedStatement의 파라미터(바인딩변수)까지 보는 법 (log4jdbc 사용)

By | 10월 6, 2011

1. 참조 링크 

     http://code.google.com/p/log4jdbc/
     스프링에서 SQL 로그 사용하기 (log4jdbc,log4sql)
     log4jdbc를 사용한 JDBC 로그 분석

2. 방법

   - log4j 는 이미 사용하고 있다는 가정 하에 기술.

    (1) 라이브러리를 다운받고 클래스패스에 붙여 넣는다.

(a) log4jdbcxxx.jar (jdk 버전을 타므로 주의하자)
(b) slf4j-api-xxx.jar
(c) slf4j-log4j12-xxx.jar

   (2) 데이터 소스 설정을 변경한다.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
   <property name="driverClassName" value="net.sf.log4jdbc.DriverSpy"/>
   <property name="url" value="jdbc:log4jdbc:oracle:thin:@127.0.0.1:1521:ORCL" />
   <property name="username" value="bruce"/>
   <property name="password" value="1234"/>
</bean>

   (3) 현재 사용중인 log4j.xml 에 log4jdbc 용 logger 엘리먼트들을 추가한다.

 <!-- log4jdbc 를 위한 설정 -->
 <!-- 여러가지 설정이 있지만 jdbc.sqltiming 만 살려두는 것이 가장 깔끔한 것 같다. -->
 
 <!-- log SQL (pre-execution) plus exceptions caused by SQL -->   
 <logger name="jdbc.sqlonly" additivity="false">     
  <level value="fatal"/>     
  <appender-ref ref="console"/>   
 </logger>     
 
 <!-- log SQL with timing information, post execution -->   
 <logger name="jdbc.sqltiming" additivity="false">     
  <level value="debug"/>     
  <appender-ref ref="console"/>   
 </logger>     
 
 <!--only use the two logs below to trace ALL JDBC information, This can be very voluminous!-->     
 <!-- log all jdbc calls except ResultSet calls -->   

 <logger name="jdbc.audit" additivity="false">     
  <level value="fatal"/>     
  <appender-ref ref="console"/>   
 </logger>     
 
 <!-- log the jdbc ResultSet calls -->   
 <logger name="jdbc.resultset" additivity="false">     
  <level value="fatal"/>     
  <appender-ref ref="console"/>   
 </logger>       
 
 <!-- log connection open/close events and dump of all open connection numbers -->   
 <logger name="jdbc.connection" additivity="false">     
  <level value="fatal"/>     
  <appender-ref ref="console"/>   
 </logger>     
 
 <!-- this log is for internal debugging of log4jdbc, itself -->   
 <!-- debug logging for log4jdbc itself -->   
 <logger name="log4jdbc.debug" additivity="false">     
  <level value="fatal"/>     
  <appender-ref ref="console"/>   
 </logger> 
  
 <!--// log4jdbc 를 위한 설정 -->      

* 분명히 위와 같이 log4j.xml 에 로그레벨을 기술했는데도 불필요한 정보가 대량으로 출력되는
  상황
이 있었다. 꽤 삽질을 했지만 결국 라이브러리의 버전 문제였다. slf4j 계열의 라이브러리를
  최신으로 교체
해 주니 로그레벨이 잘 적용되었다.

3. 장/단점
 
   - 장점 : log4j 의 기능을 사용할 수 있다.
   - 단점 : sql로그가 포맷팅되지 않은 상태로 출력되므로 직관적이지 않다. 

Subscribe
Notify of
guest
4 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
안녕하세요
안녕하세요
12 years ago

젓가락으로 동그랑땡 들고 계신분 누구세요?하트인가?ㅎㅎ

호러블캣
호러블캣
12 years ago

‘카호’ 라고 일본 영화배우 겸 탤런트인데요. 지금은 좀 변했지만, 예전엔 저 사진처럼 귀여웠었죠 ㅋㅋ

안녕하세요
안녕하세요
12 years ago

아 그렇군요 구글링 할때마다 요기 연구소에 와서 자주 봤었는데..
궁금증이 해결이 되었네요 ㅎㅎ
조은하루 되세요 ^^

호러블캣
호러블캣
12 years ago

네 수고하세요 >,