JPA

p6spy를 활용하여 JPA 쿼리로그 value 보기

초록색거북이 2024. 3. 7. 11:05
728x90
반응형
SMALL

JPA를 사용하다보면 show_sql, format_sql 옵션으로 쿼리 로그를 남기곤 함..

 

근데 왠걸 value에 어떠한 값이 들어있는지 확인할 수가 없음.

이런 느낌으로  물음표로 대체됌.

 

이렇게 되면 로그 보는 의미가 없으니, 물음표말고 내가 무슨 값을 넣었는지 확인할 수 있게 해주겠음.

 

우선 의존성 주입 ㄱㄱ

implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'

 

 

사실 이것만 해줘도 쿼리에 제대로 값이 찍혀나온다..

 

근데 너무 안이쁘니 포맷팅을 해주자

 

@Component
public class MultiLineFormat extends JdbcEventListener implements MessageFormattingStrategy {
    @Override // 2
    public void onAfterGetConnection(ConnectionInformation connectionInformation, SQLException e) {
        P6SpyOptions.getActiveInstance().setLogMessageFormat(getClass().getName());
    }

    @Override // 3
    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
        StringBuilder sb = new StringBuilder();
        sb.append(category).append(" ").append(elapsed).append("ms");
        if (StringUtils.hasText(sql)) {
            sb.append(highlight(format(sql)));
        }
        return sb.toString();
    }

    private String format(String sql) {
        if (isDDL(sql)) {
            return FormatStyle.DDL.getFormatter().format(sql);
        } else if (isBasic(sql)) {
            return FormatStyle.BASIC.getFormatter().format(sql);
        }
        return sql;
    }

    private String highlight(String sql) {
        return FormatStyle.HIGHLIGHT.getFormatter().format(sql);
    }

    private boolean isDDL(String sql) {
        return sql.startsWith("create") || sql.startsWith("alter") || sql.startsWith("comment");
    }

    private boolean isBasic(String sql) {
        return sql.startsWith("select") || sql.startsWith("insert") || sql.startsWith("update") || sql.startsWith("delete");
    }
}

 

코드 대충 보면, sql날릴때 앞에 오는 시작텍스트에 따라 개행해주고 이런 코드임.

 

이걸 해주면 이쁘게 포맷 대서 쿼리로그가 잘나올것임.

 

 

728x90
반응형
LIST