관리 메뉴

nalaolla

마이바티스(MyBatis) 쿼리 로그 출력 및 정렬하기 본문

MyBatis

마이바티스(MyBatis) 쿼리 로그 출력 및 정렬하기

날아올라↗↗ 2016. 3. 27. 14:42
728x90

마이바티스를 이용하여 개발을 하다보면 쿼리가 보이지 않거나, 파라미터가 안나오거나 개행문자(\n) 등이 무시되면서 한줄로 쭈~~~~욱 나와서 불편한 경우가 많습니다.


이러한 경우에는 개발하면서 불편한게 한두가지가 아닌데, 쿼리를 이쁘게 정렬해서 보기좋게 하는 방법을 보겠습니다.


1. 메이븐에 라이브러리 추가

pom.xml을 열어서 다음과 같은 라이브러리를 추가합니다. 

1
2
3
4
5
<dependency>
    <groupId>org.lazyluke</groupId>
    <artifactId>log4jdbc-remix</artifactId>
    <version>0.2.7</version>
</dependency>


2. log4j 설정 변경

log4j.xml을 열어서 다음과 같이 수정합니다.

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
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
 
    <!-- Appenders -->
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %5p [%c] %m%n" />
        </layout>  
    </appender>
     
    <appender name="console-infolog" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %5p %m%n" />
        </layout>  
    </appender>
     
    <!-- Application Loggers -->
    <logger name="first" additivity="false">
        <level value="debug" />
        <appender-ref ref="console"/>
    </logger>
     
    <!-- Query Loggers -->
    <logger name="jdbc.sqlonly" additivity="false"
        <level value="INFO"/> 
        <appender-ref ref="console-infolog"/> 
    </logger>
     
    <logger name="jdbc.resultsettable" additivity="false"
        <level value="INFO"/> 
        <appender-ref ref="console"/> 
    </logger
 
    <!-- Root Logger -->
    <root>
        <priority value="off"/>
        <appender-ref ref="console" />
    </root>
     
</log4j:configuration>

3. jdbc 설정을 다음과 같이 바꿉니다.

저는 context-datasource.xml에 DB 연결설정이 되어있습니다. (http://addio3305.tistory.com/62 참조) 

만약 저랑 다르신분들은................ DB 연결설정이 되어있는 파일을 수정하시면 됩니다.


context-datasource.xml을 열고 다음과 같이 수정합니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="UTF-8"?>
     
    <bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
        <property name="username" value="아이디"/>
        <property name="password" value="비밀번호"/>
    </bean>
     
    <bean id="dataSource" 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>
</beans>

기존에는 jdbc를 이용한 DB 연결을 dataSource라는 이름으로 바로 사용했었습니다. log4j-remix는 이러한 쿼리를 중간에 가로채서 

이쁘게 정렬시켜주는 역할을 합니다.


위에서 보신것처럼 기존에 DB와 연결하는것은 dataSourceSpied로 변경하고, 새로 dataSource를 만들었습니다.

그리고 로그타입과 쿼리를 어떻게 출력할지를 설정해주었습니다. 


4. 확인을 해봅시다.

이제 설정은 모두 완료가 되었으니 정확히 동작하는지 보겠습니다. 


먼저, 기존에 log4j 와 log4j-remix가 설정되지 않았을 경우입니다.


네.... 참으로 횡~~~~한 로그창이네요 -_-;



다음은 모두 설정한 후의 결과입니다.

네!!! 많이 달라졌습니다.

728x90