DataBase/My-Batis
MyBatis 쿼리 로그를 이쁘게 정렬 해보자
PCOSPD 100LRE SCRIE4A2
2021. 5. 30. 02:19
MyBatis 쿼리가 위와 같이 불편하게 출력되고 있습니다.
한줄짜리 쿼리로그는 ? 를 아래 Parameters 에 출력된 '메모(String)'로 수동으로 넣어서 쿼리를 조회하면 되겠지만,
쿼리가 100줄이상에 parameter가 10개 넘어가면 일일이 찾아 바꿔 조회하는 것도 번거롭습니다.
파라미터가 바인딩된 쿼리로 pretty 하게 출력되도록 설정해보겠습니다.
1. build.gradle에 log4jdbc dependency추가.
/** for MyBatis Log Beautifier. using log4jdbc */
implementation('org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16')
2. main/resources/ 하위에 log4jdbc.log4j2.properties 파일 추가하고 아래와 같은 값을 추가.
log4jdbc.spylogdelegator.name = net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength = 0
log4jdbc.auto.load.popular.drivers=false
log4jdbc.drivers=com.mysql.cj.jdbc.Driver
3. application.yml 설정파일 > data-source의 driver-class-name을 net.sf.log4jdbc.sql.jdbcapi.DriverSpy 로 변경. url은 jdbc:log4jdbc:mysql://.... 와 같이 중간에 log4jdbc를 추가.
spring:
# Database connection setting.
datasource:
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
url: jdbc:log4jdbc:mysql://218.153.171.34:3306/map?autoReconnect=true
4. main/resources/ 에 logback.xml 파일을 추가하고 아래와 같이 설정.
sqltiming 로그만 DEBUG 로 출력되도록 해볼까요.
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%highlight([%-5level]) [%d{yy-MM-dd HH:mm:ss}] %cyan(%logger{36})\n - %msg%n</pattern>
</encoder>
</appender>
<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.resultsettable" level="OFF"/> <!-- 결과값을 보여줌-->
<logger name="log4jdbc.debug" level="OFF"/>
<logger name="jdbc.audit" level="OFF"/>
<logger name="jdbc.resultset" level="OFF"/>
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
이제 출력결과를 확인하면 아래와 같이 resultSet에 파라미터를 대입한 상태로 출력 됩니다.
Mapper에 작성한 SQL문의 쿼리 정렬 상태 그대로 출력되고 있군요.