728x90

Spring Boot 내에서 연동한 MyBatis의 쿼리 실행 로그를 볼 수 있도록 설정해보자.

 

1. Dependency 추가

<dependency>
    <groupId>org.bgee.log4jdbc-log4j2</groupId>
    <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
    <version>1.16</version>
</dependency>
  • Log4jdbc Dependency를 추가한다.

 

2. application.properties DB 설정 변경

spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.jdbc-url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=1234
  • 기존의 application.properties 내에서 DB 설정 부분이 이렇게 되어 있었다면 수정할 부분은 딱 2가지가 된다.
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.jdbc-url=jdbc:log4jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=1234
  • spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy - 드라이버 클래스 이름 변경
  • spring.datasource.jdbc-url=jdbc:log4jdbc:postgresql://localhost:5432/postgres - url 주소에 'log4jdbc' 삽입

 

3. log4jdbc.log4j2.properties 생성

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0
  • resources 폴더 바로 밑에 생성해준다.
  • 다음 설정을 입력해둔다.

 

4. logback.xml 생성 및 설정

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<appender name="STDOUT"
		class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d{yyyyMMdd HH:mm:ss.SSS} [%thread] %-3level %logger{5} - %msg %n</pattern>
		</encoder>
	</appender>
	<logger name="jdbc" 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" />
	<logger name="jdbc.connection" level="OFF" />
	<root level="INFO">
		<appender-ref ref="STDOUT" />
	</root>
</configuration>
  • 쿼리 로그를 어떻게 보여줄지에 대해 직접적으로 설정하는 파일이다.
  • 이것도 마찬가지로 resources 폴더 바로 밑에 생성한다.
  • 가장 중요한 3가지 설정을 보자면,
  • jdbc.sqlonly: 실행된 SQL 문만을 로그로 출력할지 여부
  • jdbc.sqltiming: 실행된 SQL문과 함께 해당 쿼리를 실행하는 데 걸린 시간을 로그로 출력할지 여부 
  • jdbc.resultsettable: SELECT 쿼리 결과인 ResultSet의 내용을 테이블 형식으로 로그에 출력할지 여부

 

※ 결과

728x90