Skip to content

Commit

Permalink
Feat: sql로그를 예쁘게 보기위해 p6spy 도입 (#23)
Browse files Browse the repository at this point in the history
* #22 - feat: `p6spy` 설정 추가

기존의 hibernate 로그 끄기

* #22 - feat: 로그를 예쁘게 보기위한 설정
  • Loading branch information
GGHDMS authored Jan 10, 2024
1 parent b136edc commit d4e6aff
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 6 deletions.
3 changes: 3 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-validation'

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

// Swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'

Expand Down
18 changes: 18 additions & 0 deletions src/main/java/cotato/bookitlist/config/P6SpyConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package cotato.bookitlist.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class P6SpyConfig {

@Bean
public P6SpyEventListener p6SpyCustomEventListener() {
return new P6SpyEventListener();
}

@Bean
public P6SpyFormatter p6SpyCustomFormatter() {
return new P6SpyFormatter();
}
}
15 changes: 15 additions & 0 deletions src/main/java/cotato/bookitlist/config/P6SpyEventListener.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package cotato.bookitlist.config;

import com.p6spy.engine.common.ConnectionInformation;
import com.p6spy.engine.event.JdbcEventListener;
import com.p6spy.engine.spy.P6SpyOptions;

import java.sql.SQLException;

public class P6SpyEventListener extends JdbcEventListener {

@Override
public void onAfterGetConnection(ConnectionInformation connectionInformation, SQLException e) {
P6SpyOptions.getActiveInstance().setLogMessageFormat(P6SpyFormatter.class.getName());
}
}
77 changes: 77 additions & 0 deletions src/main/java/cotato/bookitlist/config/P6SpyFormatter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package cotato.bookitlist.config;

import com.p6spy.engine.logging.Category;
import com.p6spy.engine.spy.appender.MessageFormattingStrategy;
import org.hibernate.engine.jdbc.internal.FormatStyle;

import java.util.Locale;

public class P6SpyFormatter implements MessageFormattingStrategy {

private static final String NEW_LINE = "\n";
private static final String TAP = "\t";
private static final String CREATE = "create";
private static final String ALTER = "alter";
private static final String DROP = "drop";
private static final String COMMENT = "comment";

@Override
public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
if (sql.trim().isEmpty()) {
return formatByCommand(category);
}
return formatBySql(sql, category) + getAdditionalMessages(elapsed);
}

private static String formatByCommand(String category) {
return NEW_LINE
+ "Execute Command : "
+ NEW_LINE
+ NEW_LINE
+ TAP
+ category
+ NEW_LINE
+ NEW_LINE
+ "----------------------------------------------------------------------------------------------------";
}

private String formatBySql(String sql, String category) {
if (isStatementDDL(sql, category)) {
return NEW_LINE
+ "Execute DDL : "
+ NEW_LINE
+ FormatStyle.DDL
.getFormatter()
.format(sql);
}
return NEW_LINE
+ "Execute DML : "
+ NEW_LINE
+ FormatStyle.BASIC
.getFormatter()
.format(sql);
}

private String getAdditionalMessages(long elapsed) {
return NEW_LINE
+ NEW_LINE
+ String.format("Execution Time: %s ms", elapsed)
+ NEW_LINE
+ "----------------------------------------------------------------------------------------------------";
}

private boolean isStatementDDL(String sql, String category) {
return isStatement(category) && isDDL(sql.trim().toLowerCase(Locale.ROOT));
}

private boolean isStatement(String category) {
return Category.STATEMENT.getName().equals(category);
}

private boolean isDDL(String lowerSql) {
return lowerSql.startsWith(CREATE)
|| lowerSql.startsWith(ALTER)
|| lowerSql.startsWith(DROP)
|| lowerSql.startsWith(COMMENT);
}
}
6 changes: 0 additions & 6 deletions src/main/resources/application.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@ spring:
open-in-view: false
hibernate:
ddl-auto: create
show-sql: true
properties:
hibernate.format_sql: true
dialect: org.hibernate.dialect.MySQL8InnoDBDialect
defer-datasource-initialization: true
sql.init.mode: always
Expand All @@ -21,10 +19,6 @@ spring:
host: localhost
port: 6379

logging:
level:
org.hibernate.SQL: debug

api:
aladin:
key: ${ALADIN_KEY}

0 comments on commit d4e6aff

Please sign in to comment.