본문으로 바로가기

목차

    0. 환경

    • windows10
    • openjdk version "1.8.0_242"
    • STS4 TooL (이클립스) 
    • Spring Framework 4.3.8 released
    • Spring MVC Project (Legacy Project) 

    1. maven 추가 (pom.xml)

    • log4jdbc-log4j2-jdbc4
    <!-- Mybatis log -->
    <!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4.1 -->
    <dependency>
    	<groupId>org.bgee.log4jdbc-log4j2</groupId>
    	<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
    	<version>1.16</version>
    </dependency>

    2. log4jdbc.log4j2.properties

    /src/main/resources 경로에 log4jdbc.log4j2.properties파일을 생성 후 아래의 내용을 작성해줍니다.

    log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
    #maxlinelength는 sql문을 최대 몇 라인까지 출력할 것인지 설정합니다. (0 = 제한 없음)
    log4jdbc.dump.sql.maxlinelength=0

    3. driverClassName, jdbcUrl 변경

    root-context.xml에 등록한 mybatis bean의 driverClassNamejdbcUrl를 수정해줍니다.

    //변경 전
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
    
    //변경 후
    <property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
    //변경 전
    <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306?useSSL=false&amp;serverTimezone=UTC" />
    
    //변경 후
    <property name="jdbcUrl" value="jdbc:log4jdbc:mysql://127.0.0.1:3306?useSSL=false&amp;serverTimezone=UTC" />

    4. 로그 출력 범위 설정

    • 로그 설정 파일을 수정해 log4jdbc-log4j2의 출력 범위를 지정합니다.
    • 지정하지 않은 경우엔 모든 로그가 출력되므로 추가적으로 설정을 권장합니다.
    • 필자는 logback을 사용하므로 logback.xml파일을 수정했습니다.
    <logger name="jdbc" level="OFF"/>
    <logger name="jdbc.connection" level="OFF"/>
    <logger name="jdbc.sqlonly" level="OFF"/>
    <logger name="jdbc.sqltiming" level="DEBUG"/>
    <logger name="jdbc.audit" level="OFF"/>
    <logger name="jdbc.resultset" level="OFF"/>
    <logger name="jdbc.resultsettable" level="DEBUG"/>​
    •  jdbc.sqlonly : SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보입니다.
    •  jdbc.sqltiming : SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함합니다.
    •  jdbc.audit : ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남깁니다. 많은 양의 로그가 생성되므로 권장되지 않습니다.
    •  jdbc.resultset : ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 매우 방대한 양의 로그가 생성됩니다.
    •  jdbc.resultsettable : SQL 결과 조회된 데이터의 table을 로그로 남깁니다.

    5. 실행결과