IT/development

[spring boot/mybatis] 쿼리 로그 정렬 및 기타(feat. log4jdbc)

알 수 없는 사용자 2022. 11. 19. 06:03
반응형

목차

     

    mybatis log4j 쿼리 로그 정렬 및 기타 😄

    mybatis와 log4j를 처음 사용할 때는 아래처럼 쿼리가 일렬로 나오고 parameter값이 "?"로 표시된다.

    짧은 쿼리면 상관 없지만 긴 쿼리의 경우에는 Parameters로 나온 값을 ?에 복붙을 해서 쿼리를 실행해 봐야 된다.

    시간도 시간이고 가독성도 안좋아서 개발시에는 여간 불편한게 아니다.

    그래서 log4jdbc를 이용해서 쿼리를 보기 좋게 정렬/정리하는 방법을 기록한다.


    log4jdbc 의존성 추가 🤗

    maven 기준 pom.xml에 의존성 추가

    <dependency>
    <groupId>org.bgee.log4jdbc-log4j2</groupId>
    <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
    <version>1.16</version> <!-- version은 나중에 다른 걸로 하게 될 수도 있음 -->
    </dependency>

     

    gradle 기준 build.gradle에 의존성 추가

    // 여기에 추가
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
        implementation 'org.springframework.boot:spring-boot-starter-web'
        implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2'
        implementation 'org.springframework.boot:spring-boot-devtools'
        // 이 것 추가(버전을 따로 명시하지 않아도 starter에서 최적화 버전을 가지고 옴)
        implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
        compileOnly 'org.projectlombok:lombok'
        runtimeOnly 'com.h2database:h2'
        testCompileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }

     

    application.properties의 jdbc 접속정보 url, driver class name 변경 😉

    # 기존의 jdbc:mysql을 jdbc:log4jdbc:mysql 로 시작하는 url 로 변경(jdbc:"이 사이에 log4jdbc 추가됨":mysql)
    #url: jdbc:mysql://localhost:3306/test  
    url: jdbc:log4jdbc:mysql://localhost:3306/test
    username: test
    password: 1234
    # 기존의 com.mysql.jdbc.Driver를 net.sf.log4jdbc.sql.jdbcapi.DriverSpy 로 변경
    #driver-class-name: com.mysql.jdbc.Driver 
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy

    application.yml의 경우 아래처럼 url, driver class name 변경 😅

    spring:
      datasource:
    #    url: jdbc:h2:tcp://localhost/~/devlsy-service1;MODE=mySQL
    # 아래처럼 변경(아래는 h2 메모리 DB 사용한 경우)
        url: jdbc:log4jdbc:h2:tcp://localhost/~/devlsy-service1;MODE=mySQL
        username: sa
        password:
    #    driver-class-name: org.h2.Driver
    # 드라이버명 아래처럼 변경
        driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
    
    mybatis:
      mapper-locations: mybatis-mapper/**/*.xml

     

     

    logback.xml 수정 (이건 내 경우이고, 다른 걸 사용할 시 logger 설정 하는 곳 수정)😆

    <logger name="jdbc" level="OFF"/>
    <!-- sqlonly 레벨 수정-->
    <logger name="jdbc.sqlonly" level="DEBUG"/>
    <logger name="jdbc.sqltiming" level="DEBUG"/>
    <logger name="jdbc.audit" level="OFF"/>
    <logger name="jdbc.resultset" level="OFF"/>
    <!-- 쿼리 결과를 테이블 형식으로 볼려면 resultsettable 레벨 수정 -->
    <logger name="jdbc.resultsettable" level="DEBUG"/>
    <logger name="jdbc.connection" level="OFF"/>

     

    log4jdbc.log4j2.properties 추가 🙄

    src/main/resources경로에 log4jdbc.log4j2.properties 추가 후 아래 내용 입력

    log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
    log4jdbc.dump.sql.maxlinelength=0

     

    적용 결과 😛

     

    참조 : http://jmlim.github.io/spring/2018/12/26/spring-boot-logback-sql-pretty/

     

    스프링 부트(Spring boot) 마이바티스(Mybatis) 에서 쿼리 로그 출력 및 정렬하기. · 기억하기 위한 개

    스프링 부트(Spring boot) 마이바티스(Mybatis) 에서 쿼리 로그 출력 및 정렬하기. 26 Dec 2018 | Spring Logback SQL 정렬 SQL pretty MyBatis 마이바티스 (이 내용은 Spring boot의 logback(기본로그설정)을 사용하며 mybati

    jmlim.github.io

     

    반응형