전자정부표준프레임워크를 설치하고

템플릿 프로젝트를 임포트했다면 기본적으로 ibatis설정으로 되었을 것이다.

그리고 로그는 log4j에 의해서 로그가 남는다.


log4j2.xml 파일을 찾아

<logger name="java.sql.Connection" level="INFO" additivity="false">

<appender-ref ref="console" />

</logger>

에서 INFO를 DEBUG로 변경하면 로그를 볼 수 있다.


또한 java.sql 객체의 각 항목별로 적용하려면 각 항목별 아래 소스를 추가하면 된다.


<logger name="java.sql.Connection" level="DEBUG" additivity="false">

<appender-ref ref="console" />

</logger>

<logger name="java.sql.PreparedStatement" level="DEBUG" additivity="false">

<appender-ref ref="console" />

</logger>

<logger name="java.sql.Statement" level="DEBUG" additivity="false">

<appender-ref ref="console" />

</logger>

<logger name="java.sql.ResultSet" level="DEBUG" additivity="false">

<appender-ref ref="console" />

</logger>


로그 결과물은 다음과 같이 보여진다.



쿼리와 쿼리에 들어가는 파라미터

그리고 쿼리 결과까지

쿼리 결과를 보고 싶지 않다면 java.sql.ResultSet 부분을 지우면 된다.


그런데 문제가 있다.

쿼리는 preparestatement 상태의 쿼리를 보여준다. 즉

SELECT NAME FROM USER WHERE ID = ?

위와같이 파라미터로 들어가는 값은 ? 물음표 표시로 보여진다. 여기에 파리미터를 순서로 적용된 쿼리가 실제 실행되는 쿼리가 된다.


파라미터가 한두개면 각 쿼리에 적용해서 디버깅 하겠지만 파라미터가 많아지고 복잡해 진다면 파라미터를 넣어서 실행하기는 쉽지 않다.


그래서 실행되는 쿼리 자체의 문자열을 받아보고 디버깅을 하고 싶을 것이다.


이런 경우 

log4jdbc-remix 를 사용한다.


우선 pom.xml 에 추가

<dependency>  

<groupId>org.lazyluke</groupId>  

  <artifactId>log4jdbc-remix</artifactId>  

  <version>0.2.4</version>  

</dependency>  


<dependency>  

  <groupId>org.slf4j</groupId>  

  <artifactId>slf4j-log4j12</artifactId>  

  <version>1.6.1</version>  

</dependency>


context-datasource.xml에서 오라클인 경우

    <!-- Oracle -->

    <bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

        <property name="driverClassName" value="${Globals.DriverClassName}"/>

        <property name="url" value="${Globals.Url}" />

        <property name="username" value="${Globals.UserName}"/>

        <property name="password" value="${Globals.Password}"/>

    </bean> 

    <bean id="dataSource-oracle" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">

    <constructor-arg ref="dataSourceSpied" />

    <property name="logFormatter">

    <bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">

    <property name="loggingType" value="MULTI_LINE" />

    <property name="sqlPrefix" value="SQL:::" />

    </bean>

    </property>

    </bean>


기존의 datasorce 빈 생성 부분아래에

log4jdbc-remix로 연결하는 설정을 추가해 준다.

기존 빈은 참조 아이디로 사용되므로 알맞게 변경해 주면 된다..

추가된 빈은 dataSource-oracle로 아이디를 설정한다.


왜냐하면 윗부분에 dataSource를 alias로 설정하는 부분이 있으므로 상단부분을 수정하지 않을것이면

그대로 사용하는것이 편하다.




+ Recent posts