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
(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>
<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 를 위한 설정 -->
<!-- 여러가지 설정이 있지만 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로그가 포맷팅되지 않은 상태로 출력되므로 직관적이지 않다.
젓가락으로 동그랑땡 들고 계신분 누구세요?하트인가?ㅎㅎ
‘카호’ 라고 일본 영화배우 겸 탤런트인데요. 지금은 좀 변했지만, 예전엔 저 사진처럼 귀여웠었죠 ㅋㅋ
아 그렇군요 구글링 할때마다 요기 연구소에 와서 자주 봤었는데..
궁금증이 해결이 되었네요 ㅎㅎ
조은하루 되세요 ^^
네 수고하세요 >,