티스토리 뷰

반응형

JPA를 사용하면서 show-sql 과 format_sql 옵션으로 쿼리 로그를 사용하고 있는데

프로젝트 중 mybatis 도 일부 사용하고 있어 여기도 쿼리로그를 남기기위해 어떻게 할까 고민하던 중

p6spy 쿼리로깅을 찾게 되었다.

 

찾아보니까 아래와 같이 3가지 방법으로 설정할 수 있었다.

 

# Datasource 방식 / URL연결 방식
implementation 'p6spy:p6spy:3.9.1'

# SpringBoot 자동설정 방식
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.8.1'

 

URL 연결 방식은 예전에 쿼리 로깅을 적용했던  log4jdbc 와 비슷한 구조로 설정할 수 있다.

 

spring:
  datasource:
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    url : jdbc:p6spy:oracle:thin:@localhost/
    username: 
    password: 
 
logging:
  level:
    p6spy: info

 

여기에 spy.properties 파일을 생성해서 조작해줘야 한다.

참고는 p6spy 에서 참고하면 된다. (설정파일이 너무 김;;)

 

p6spy Docs

 

P6Spy Installation — p6spy 3.9.2-SNAPSHOT documentation

The following section contains specific information on installing P6Spy on Weblogic 12.1.3 (works with p6spy version 2.1.0 or higher). Weblogic 12.1.3 The provided instructions were tested with Weblogic 12.1.3 (for developers). In later section is $WLS_HOM

p6spy.readthedocs.io

 

 

 

 

나는 기존에 설정된 것들을 건드리고 싶지 않아서 SpringBoot 자동 방식으로 설정하였다.

 

implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.8.1'
#p6spy query logging
decorator:
  datasource:
    p6spy:
      enable-logging: true

jpa에 설정된 show-sql 과 format-sql 은 모두 주석처리 하든가 삭제처리한다.

 

 

여기까지 하고 테스트해보면 쿼리가 한줄로 해가지고 뒤에 인자값들이 보이는 것을 알 수 있다.

잘 적용된 것은 확인 했고 쿼리가 한줄로 나와 가독성이 떨어져서 

타 블로그 참고하여 포맷 설정파일을 추가해줬습니다.

 

@Configuration
public class P6SpyFomatter implements MessageFormattingStrategy {

    @PostConstruct
    public void setLogMessageFormat() {
        P6SpyOptions.getActiveInstance().setLogMessageFormat(this.getClass().getName());
    }

    @Override
    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
        sql = formatSql(category, sql);
        return String.format("[%s] | %d ms | %s", category, elapsed, formatSql(category, sql));
    }

    private String formatSql(String category, String sql) {
        if (sql != null && !sql.trim().isEmpty() && Category.STATEMENT.getName().equals(category)) {
            String trimmedSQL = sql.trim().toLowerCase(Locale.ROOT);
            if (trimmedSQL.startsWith("create") || trimmedSQL.startsWith("alter") || trimmedSQL.startsWith("comment")) {
                sql = FormatStyle.DDL.getFormatter().format(sql);
            } else {
                sql = FormatStyle.BASIC.getFormatter().format(sql);
            }
            return sql;
        }
        return sql;
    }
}

 

    select
        sampleenti0_.ID as id1_1_,
        sampleenti0_.USER_EMAIL as user_email2_1_,
        sampleenti0_.USER_NAME as user_name3_1_       
    from
        sample sampleenti0_       
    where
        sampleenti0_.ID='F0B1D4AC6B57542FE055000000000001'

 

쿼리 로그가 이쁘게 나올 뿐아니라

인자값 까지 표기되는 것을 확인했습니다.

 

JPA와 mybatis 동시에 반영된 것을 확인!

 

 

 

 

 

 

 

 

 

 

 


참고블로그
 

[Spring Boot JPA] P6Spy 활용해 쿼리 로그 확인하기

Intro 스프링부트와 JPA로 프로젝트를 진행하다 보면 실제 쿼리가 어떻게 나갈지 눈으로 확인을 하고 싶을 때가 참 많습니다. JPA가 참 편하긴 한데 개발자가 직접 쿼리를 작성하지 않았다 보니 실

shanepark.tistory.com

 

반응형
댓글
반응형
최근에 올라온 글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Total
Today
Yesterday