냐냐한 IT/냐냐한 Spring Boot

MyBatis Logging 추가

소소하냐 2019. 9. 25. 20:33

Spring Boot + MyBatis 프로젝트 연습 목록 

- 01. 신규 Spring Boot 프로젝트 만들기

- 02. Thymeleaf, spring-boot-devtools 추가

- 03. Spring Boot에 H2 추가 

- 04. Spring Boot + H2 + Jdbc로 사용해보기

- 05. Spring Boot + H2 + MyBatis로 사용해보기 

- 06. MyBatis Logging 추가 (현재 포스트)


MyBatis를 사용할 때, 어떤 쿼리가 실행되고 어떤 파라미터가 전달되었는지 또한 어떤 결과가 나왔는지를 확인할 수 있도록 logging을 설정하는 방법을 알아보도록 하겠습니다. 라이브러리 추가 없이 기본 기능으로 표시해주는 방법과 라이브러리를 추가하여 쿼리와 결과를 더 보기 좋게 출력하는 방법을 소개하겠습니다. 

 

Logback 이용해서 MyBatis 쿼리 Logging 

 

* 참고 : "Starter"를 사용하면 Logging 기본값은 Logback

방법 1. application.properties에 mapper에 설정했던 mapper namespace(<mapper namespace="Account">)를 원하는 레벨(debug)로 지정

... 생략 ...

logging.level.Account=debug 

방법 2. 위 내용을 logback-spring.xml 파일로 따로 관리 (앞선 application.properties에 추가한 logging.level.Account=debug는 중복이므로 삭제)
: /src/main/resources 폴더에 logback-spring.xml 파일 생성

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<include resource="org/springframework/boot/logging/logback/base.xml"/>
	<logger name="Account" level="DEBUG" />
  <!-- <logger name="org.springframework.jdbc" level="DEBUG" /> -->
</configuration>

해당 mapper의 쿼리가 호출될 때 아래와 같은 로그가 찍히는 것을 확인할 수 있다.

호출된 매퍼의 네임스페이스(Account)와 id(findAll, count..) 표시 

추가로 위 logback-spring.xml 파일에 <logger name="org.springframework.jdbc" level="DEBUG" /> 부분의 주석을 제거하면 schema.sql에 등록한 쿼리 및 jdbc 로그도 확인이 가능

주석 제거시 jdbc가 수행하는 로그를 추가로 볼 수 있다

 

참고 사이트 : Spring Boot Reference Guide - Logging [새창] 

 

 

조금 더 보기 좋은 MyBatis 쿼리 Logging

 

1. pom.xml에 의존성 추가

<dependency>
  <groupId>org.bgee.log4jdbc-log4j2</groupId>
  <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
  <version>1.16</version>
</dependency>

2. JDBC URL 변경 - URL 앞에 jdbc:log4 추가 (application.properties

: spring.datasource.url=jdbc:log4jdbc:h2:~/leveldiary;AUTO_SERVER=TRUE

 

3. JDBC driver-class-name 설정 (application.properties)

: spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy 

 

4. logger 설정 (SLF4J 사용)

    4-1. /src/main/resources 폴더에 log4jdbc.log4j2.properties 파일 추가 

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
  • logback-spring.xml 설정 파일을 추가하지 않고 여기까지만 해도 로그는 잘 나오는 것을 확인하였다. 세심한 설정 및 줄 바꿈으로 가독성 향상을 원한다면 아래 4-2 내용을 추가

    4-2. /src/main/resources 폴더에 logback-spring.xml 설정

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<include resource="org/springframework/boot/logging/logback/base.xml"/>
	
	<!-- 좀 더 보기 좋은 MyBatis 쿼리 Log : log4jdbc -->
	<logger name="jdbc.sqlonly" level="debug" />
	<logger name="jdbc.sqltiming" level="off" />
	<logger name="jdbc.audit" level="off" />
	<logger name="jdbc.resultset" level="off" />
	<logger name="jdbc.resultsettable" level="debug" />
	<logger name="jdbc.connection" level="off" />
</configuration>
  • jdbc.sqlonly : SQL만 log. prepared statement에서 실행된 SQL은 해당 위치에 바인딩된 argument로 자동으로 표시되므로 가독성이 크게 향상된다.
  • jdbc.sqltiming : 실행시간과 SQL log
  • jdbc.audit : ResultSets을 제외한 모든 JDBC 호출 log. 이는 매우 방대한 출력이며 특정 JDBC 문제를 추적할 경우가 아니면 일반적으로 필요하지 않음
  • jdbc.resultset : ResultSet 객체에 대한 모든 호출이 기록되므로 훨씬 더 방대
  • jdbc.resultsettable : 테이블로 jdbc 결과를 log. Level debug는 result set에서 읽지 않은 값을 채운다
  • jdbc.connection : connection open, close 이벤트를 기록하고 열려있는 모든 connection number를 dump. connection 누수 문제를 해결하는데 매우 유용
  • 위 내용을 참고하여 각자 용도에 맞게 level 설정하여 사용 

log4jdbc-log4j2-jdbc4.1 이용한 로깅 결과 화면

 

참고 사이트 : Log4jdbc-log4j2 [새창]

 

지금까지의 내용은 github에 branch:006-mybatis-logging[새창]으로 확인하실 수 있습니다

 


Spring Boot + MyBatis 프로젝트 연습 목록 

- 01. 신규 Spring Boot 프로젝트 만들기

- 02. Thymeleaf, spring-boot-devtools 추가

- 03. Spring Boot에 H2 추가 

- 04. Spring Boot + H2 + Jdbc로 사용해보기

- 05. Spring Boot + H2 + MyBatis로 사용해보기 

- 06. MyBatis Logging 추가 (현재 포스트)