티스토리 뷰
@Slf4j
@DisplayName("JPA 연결 테스트")
@Import(JpaConfig.class)
@ImportAutoConfiguration({DataSourceDecoratorAutoConfiguration.class, P6SpySqlFormatter.class})
@ActiveProfiles("local")
@Configuration
public class P6SpySqlFormatter {
@PostConstruct
public void setLogMessageFormat() {
P6SpyOptions.getActiveInstance().setLogMessageFormat(P6spySqlFormatConfiguration.class.getName());
}
static public class P6spySqlFormatConfiguration implements MessageFormattingStrategy {
// 표기에 허용되는 filter
private static final String ALLOW_FILTER = "com.hanssem";
@Override
public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
sql = formatSql(category, sql);
if (sql.trim().isEmpty()) { // sql 이 없다면 출력하지 않아도 됨
return "";
}
// stack 을 구성하는 Format을 만든다
return sql + createStack(connectionId, elapsed);
// return sql + "\n\n";
}
private String formatSql(String category, String sql) {
if (sql == null || sql.trim().isEmpty()) {
return sql;
}
// Only format Statement, distinguish DDL And DML
if (Category.STATEMENT.getName().equals(category)) {
String tmpsql = sql.trim().toLowerCase(Locale.ROOT);
if (tmpsql.startsWith("create") || tmpsql.startsWith("alter") || tmpsql.startsWith("comment")) {
sql = FormatStyle.DDL.getFormatter().format(sql);
} else {
sql = FormatStyle.BASIC.getFormatter().format(sql);
}
sql = "|\n--------------------------------------" + sql;
}
return sql;
}
// stack 콘솔 표기
private String createStack(int connectionId, long elapsed) {
Stack<String> callStack = new Stack<>();
StackTraceElement[] stackTrace = new Throwable().getStackTrace();
for (StackTraceElement stackTraceElement : stackTrace) {
String trace = stackTraceElement.toString();
// trace 항목을 보고 내게 맞는 것만 필터
if (trace.startsWith(ALLOW_FILTER)) {
callStack.push(trace);
}
}
StringBuilder sb = new StringBuilder();
int order = 1;
while (!callStack.isEmpty()) {
sb.append("\n\t\t").append(order++).append(".").append(callStack.pop());
}
return new StringBuffer().append("\n\tCall Stack:").append(sb)
.append("\n--------------------------------------\n")
.toString();
}
}
}
댓글
- Total
최근에 올라온 글