JPA를 사용하며 쿼리 로그를 출력해야 할 때의 설정은 다음과 같다.

application.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
spring:
  jpa:
    properties:
      hibernate:
        show_sql: true
        format_sql: true
logging:
  level:
    org.hibernate.sql: debug
    org.hibernate.type: trace # parameter 값 보기

show_sql 옵션은 System.out 에 Hibernate 실행 SQL을 남기고,

org.hibernate.sql 옵션은 logger를 통해 Hibernate 실행 SQL을 남긴다.

가급적 쿼리 출력은 로거를 통해 남기자!

위 설정으로 parameter 값을 볼 수 있지만 쿼리문 안에 parameter 값이 적용되어있지 않아 보기 불편할 수 있다.


이 때 p6spy를 적용해 쿼리 로그를 확인해보자.

build.gradle

1
2
3
4
dependencies {
	// p6spy
	implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
}

application.yml

1
2
3
4
5
6
7
decorator:
  datasource:
    # p6spy 설정 적용
    p6spy:
      enable-logging: true
      multiline: true
      logging: slf4j

p6spy 설정을 통해 log 파일을 남기거나 log 포맷을 바꾸는 등 여러 설정을 할 수 있다.

2023년 3월 8일 기준 SpringBoot 3.0 이상에서도 잘 작동한다.

참고: https://github.com/gavlyukovskiy/spring-boot-data-source-decorator


p6spy가 적용 된 로그를 확인해보자.

1
2
3
4
2023-03-08T23:59:58.355+09:00  INFO 51289 --- [           main] p6spy
insert into member (username, id) values (?, ?)
insert into member (username, id) values ('member', 1);
2023-03-08T23:59:58.356+09:00  INFO 51289 --- [           main] p6spy

바인딩 된 parameter 값이 쿼리 문 안에 잘 적용된 모습이다.