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의 쿼리가 호출될 때 아래와 같은 로그가 찍히는 것을 확인할 수 있다.
추가로 위 logback-spring.xml 파일에 <logger name="org.springframework.jdbc" level="DEBUG" /> 부분의 주석을 제거하면 schema.sql에 등록한 쿼리 및 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 [새창]
지금까지의 내용은 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 추가 (현재 포스트)
'냐냐한 IT > 냐냐한 Spring Boot' 카테고리의 다른 글
Spring Boot - Security 사용하기 (인메모리) (2) | 2019.10.12 |
---|---|
MyBatis - Join 매핑하기 (0) | 2019.09.27 |
Spring Boot + H2 + MyBatis로 사용해보기 (0) | 2019.09.22 |
Spring Boot + H2 + Jdbc로 사용해보기 (0) | 2019.09.20 |
Spring Boot에 H2 추가 (0) | 2019.09.16 |