잘 정리해보자

Spring Boot - log 설정 본문

Spring/Spring Boot

Spring Boot - log 설정

토마토오이 2022. 2. 8. 00:09

기본 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-namelog4jdbc로 변경하고 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 {
...
}

 

Comments