잘 정리해보자
Spring Boot - log 설정 본문
기본 spring boot 실행하면, SQL로그는 따로 보이지 않기에, DB에 로그를 출력을 위해 설정을 잡는다.
1. gradle 에서는 build.gradle에 log4j2 설정을, maven은 pom.xml 에서 dependency 를 추가하고 refresh gradle/update maven 한다.
build.gradle
dependencies {
...
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
}
2. resource 파일 아래에 log4j2를 설정하는 properties 생성.
log4jdbc.log4j2.properties
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0
3. yml 파일에 DB로그 출력을 위한 세팅 추가.
application.yml
spring:
datasource:
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
url: jdbc:log4jdbc:mysql://localhost:3306/testdb
logging:
level:
org.springframwork.web : debug
sql : off
jdbc : off
jdbc.sqlonly : debug
driver-class-name을 log4jdbc로 변경하고 url에도 추가해야 SQL로그가 출력된다.
> url : jdbc:log4jdbc:mysql
- JPA 사용 경우 hibernate 로그도 출력될 수 있으므로 off 한다.
org.hibernate.SQL : off #jpa log off
- yml 파일에 logging level을 설정해 사용/미사용 로그 출력을 관리한다.
log level을 설정안하면 아래와 같이 SQL 테이블 모든 결과와 모든 로그들이 출력되어 메모리를 잡을 수 있으므로, 설정하는것을 추천한다.
...
2022-02-07 23:20:59.317 INFO 11124 --- [nio-8080-exec-1] j.resultset : 1. ResultSet.getLong(1) returned 7
2022-02-07 23:20:59.320 INFO 11124 --- [nio-8080-exec-1] j.resultsettable :
|--------------|
|generated_key |
|--------------|
|7 |
|--------------|
...
- SQL로그 출력 결과 (.yml 파일에서 jdbc.sqlonly 만 DEBUG로 설정)
2022-02-08 00:06:24.456 DEBUG 12788 --- [nio-8080-exec1] jdbc.sqlonly : com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
1. insert into todo (complete_flag, item) values (0, 'test16')
- SQL외의 로그 출력 경우, @Slf4j 어노테이션을 선언하면 log.info/debug/error 등 logger 사용이 가능하다.
@Slf4j
@RestController
public class TodoController {
...
}