본문으로 바로가기

목차

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. 실행결과