티스토리 뷰
반응형
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 에서 참고하면 된다. (설정파일이 너무 김;;)
나는 기존에 설정된 것들을 건드리고 싶지 않아서 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 동시에 반영된 것을 확인!
참고블로그
반응형
'Java > SpringBoot&Spring' 카테고리의 다른 글
[SpringBoot] Security Login 적용하기. (0) | 2023.05.03 |
---|---|
[Spring] 세션(Session) Redis에 저장하기 (feat.docker Redis) (0) | 2023.04.03 |
[SpringBoot] Security 적용시 swagger 샘플페이지로 나오는 현상 (petstore.swagger.io/v2/swagger.json) (0) | 2023.01.18 |
[SpringBoot] Springdoc을 이용한 swagger, API DOCS (0) | 2023.01.17 |
[SpringBoot] Security 로그인 시 status 999 해결 (0) | 2023.01.13 |
댓글