SQL Statement Log 를 보기위한 log4jdbc 사용법
log4jdbc3-1.1.jar
slf4j-api-1.5.3.jar
slf4j-log4j12-1.5.3.jar
SQL Statement Log 를 보기위한 log4jdbc 사용법
프로그램을 개발하기위해선 대부분 DB 가 필요하다. DB에 데이터를 가져와서 요리하기
위해선 연결하고 조작하는 framework 을 쓰게 되는데 spring jdbc 와 hibernate, iBatis 같이
섞어서 사용한다. hibernate, iBatis 은 ORM(Object-relational mapping) 프레임웍이라고 부른다.
이것은 객체와 DB 의 맵핑을 좀더 효율적으로 할수 있게 만든 프레임웍이다.
이 프레임웍을 사용할 때 동적으로 쿼리의 상태값을 보는게 쉽지 않다. 그래서 무식하게 로그를
다 찍어보곤하는데 그런 수고를 덜수있는 log4jdbc 가 있다.
이것 외에 http://mainia.tistory.com/entry/log4sql log4sql 이라는 플러그인도 있다.
이전에 소개했던 기사인데 두가지를 비교해서 장단점을 알아보지는 않았다.
여하튼 이 플러그인을 쓰기 위한 3가지 필수 라이브러리가 있다.
(1) code.google.com/p/log4jdbc
log4jdbc3-1.1.jar (jdk1.4 or 1.5)
(2) www.slf4j.org
slf4j-api-1.5.3.jar (log4jdbc 와 logging 서비스와 연동하게하는 API)
slf4j-log4j12-15.3 (log4jdbc 와 log4j 기반 Logging 연동 라이브러리)
다운받은 zip 파일 안에 위의 2가지 jar를 찾아 복사한다.
먼저 소스에 적용하기 위해서 DB 연결 정보를 수정해야한다.
driver 클래스와 url 을 변경해야되는데 아래와 같이 변경하면된다.
<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="xxxx"/>
<property name="password" value="xxxxx"/>
프로그램을 시작하고 DB 연결을 시도하면 쿼리와 파라미터 정보가 보이게 된다.
그리고 하이버넷 내부에 어떤일이 벌어지는지 상세하지는 않지만 힌트를 주는 로그를 보여준다
각 DB 에 따른 사용클래스들에 대한 표를 참조한다.
관련 사이트 : http://code.google.com/p/log4jdbc/
log4jdbc3 의 경우 JDK1.4 and JDK1.5
log4jdbc4 의 경우 JDK1.6 and JDK1.7 용입니다.
# 적용방법
JDBC Dirver 와, URL, Logback(log4j) 프로퍼티 변경
(적용전)
spp.jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
spp.jdbc.url=jdbc:oracle:thin:@localhost:1521:ora
(적용후)
spp.jdbc.driverClassName=net.sf.log4jdbc.DriverSpy
spp.jdbc.url=jdbc:log4jdbc:oracle:thin:@localhost:1521:ora
<!-- 관련 정보 http://magefister.egloos.com/2053938 -->
<logger name="java.sql">
<level value="ERROR"/>
</logger>
<!-- SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여진다. -->
<logger name="jdbc.sqlonly">
<level value="debug"/>
</logger>
<!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다. -->
<logger name="jdbc.sqltiming">
<level value="debug"/>
</logger>
<!-- ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다. 많은 양의 로그가 생성되므로
특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않는다. -->
<logger name="jdbc.audit">
<level value="error"/>
</logger>
<!-- ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 매우 방대한 양의 로그가 생성된다. -->
<logger name="jdbc.resultset">
<level value="error"/>
</logger>
Driver Class Database Type
oracle.jdbc.driver.OracleDriver Oracle
com.sybase.jdbc2.jdbc.SybDriver Sybase
net.sourceforge.jtds.jdbc.Driver jTDS SQL Server & Sybase driver
com.microsoft.jdbc.sqlserver.SQLServerDriver Microsoft SQL Server 2000 driver
com.microsoft.sqlserver.jdbc.SQLServerDriver Microsoft SQL Server 2005 driver
weblogic.jdbc.sqlserver.SQLServerDriver Weblogic SQL Server driver
com.informix.jdbc.IfxDriver Informix
org.apache.derby.jdbc.ClientDriver Apache Derby client/server driver, aka the Java DB
org.apache.derby.jdbc.EmbeddedDriver Apache Derby embedded driver, aka the Java DB
com.mysql.jdbc.Driver MySQL
org.postgresql.Driver PostgresSQL
org.hsqldb.jdbcDriver HSQLDB pure Java database
org.h2.Driver H2 pure Java database