본문 바로가기
개발/SpringBoot

SpringBoot Log4jdbc 를 사용한 Mybatis 쿼리 로그 출력

by 궁즉변 변즉통 통즉구 2022. 6. 5.
반응형

SpringBoot에서 log4jdbc를 사용하면 SQL문 로그를 좀 더 가시적으로 출력할 수 있다. SQL문에 들어가는 파라메타도 바인딩이 되어 출력이 되고, 결과도 테이블 형태로 출력되어 보기가 편해진다.

 

1. log4jdbc 의존성 추가

먼저 아래와 같이 build.gradled에 log4jdbc 라이브러리 의존성을 추가한다.

implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'

 

2. log4jdbc.log4j2.properties 파일 추가

src/main/resources 루트에 log4jdbc.log4j2.properties 파일을 추가하고 아래와 같이 입력한다.

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0  # 전체 SQL문 제한없이 출력

# Driver 설정 추가 샘플
#log4jdbc.drivers=com.mysql.cj.jdbc.Driver
#log4jdbc.auto.load.popular.drivers=false

위에 'Driver설정 추가' 부분은 log4jdbc가 내부적으로 자동으로 드라이버를 로드하지 않고 명시적으로 선언해주는 설정이다. MySQL같은 경우 log4jdbc가 기본으로 com.mysql.jdbc.Driver를 사용하여 위에 설정을 추가하지 않으면 아래와 같은 로그가 찍히게 된다.

Loading class 'com.mysql.jdbc.Driver'. This is deprecated. The new driver class is 'com.mysql.cj.jdbc.Driver'.

 

3. datasource 설정 변경

application.yml에 정의된 datasource 설정을 아래와 같이 변경한다. 여기서는 H2 데이터베이스를 기준으로 작성했다.

- driverClassName: DB 종류와 무관한게 net.sf.log4jdbc.sql.jdbcapi.DriverSpy 입력

- url: jdbc다음에  log4jdbc 추가(ex. jdbc:h2:... => jdbc:log4jdbc:h2...)

spring:
  datasource:
     # 기존 설정
     # driverClassName: org.h2.Driver
     # url: jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE
     
     # 변경 설정
     driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
     url: jdbc:log4jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE

 

4. 로그 확인

설정 후 실행을 해보면 다음과 같이 로그가 출력되는데 불필요하게 너무 많은 로그가 출력된다.

 

5. loggin 설정 추가

불필요한 로그들을 제거하기 위해 application.yml에 logging설정을 아래와 같이 추가했다. logback-spring.xml과 같이 xml로 관리를 해도 되지만 application.yml에서도 logging 설정이 가능하다.

logging:
  level:
    com:
      zaxxer:
        hikari: INFO
    javax:
      sql:
        DataSource: OFF
    jdbc:
      audit: OFF # JDBC 트러블슈팅 경우를 제외하고는 사용 권장 X
      resultset: OFF # ResultSet을 포함한 모든 JDBC 호출 정보를 출력
      resultsettable: INFO  #SQL 결과 데이터 Table형식으로 출력
      sqlonly: OFF     #SQL만 로그만 출력
      sqltiming: INFO    #SQL + 소요시간 출력
      connection : OFF  # 커넥션 연결/종료 정보 출력

위와 같이 설정 후 다시 실행을 하면 필요한 정보는 제외하고 출력되는 것을 확인할 수 있다.

 

추가적으로 테스트는 못해봤지만 "log4jdbc-spring-boot-starter"라는 것도 있는데 SpringBoot에서 좀 더 설정이나 사용의 편의를 제공하는 것 같다. 자세한 내용은 아래 링크를 참조하자.

https://github.com/candrews/log4jdbc-spring-boot-starter

 

반응형

댓글