아무거나

[Spring Boot] DB 관련 로그 추가(쿼리바인딩) 본문

Java & Kotlin/Spring

[Spring Boot] DB 관련 로그 추가(쿼리바인딩)

전봉근 2021. 5. 14. 13:25
반응형

DB 관련 로그

  • 의존성 추가 [build.gradle]
    ...
      // DB Log
      implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
    ...
    
  • ../resources/log4jdbc.log4j2.properties 파일 생성
    [log4jdbc.log4j2.properties]
    # log4jdbc spy의 로그 이벤트를 slf4j를 통해 처리
    log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
    
    # 로그를 표시할 줄의 제한 0은 무제한
    log4jdbc.dump.sql.maxlinelength=0
    
    # log4jdbc의 드라이브 클래스 설정
    log4jdbc.drivers=com.mysql.cj.jdbc.Driver
    
    # 드라이버를 자동으로 로드하지 않도록 false로 지정
    log4jdbc.auto.load.popular.drivers=false
  • DB 설정정보 수정 [application.yml]
    ...
      spring:
        datasource:
          driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
          url: jdbc:log4jdbc:mariadb://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=UTC
    ...
    
  • logback-spring.xml 에 옵션 추가
    <!-- log4jdbc 옵션 설정 --> 
    <logger name="jdbc" level="OFF"/> 
    
    <!-- 커넥션 open close 이벤트를 로그로 남긴다. --> 
    <logger name="jdbc.connection" level="OFF"/> 
    
    <!-- SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여진다. --> 
    <logger name="jdbc.sqlonly" level="DEBUG"/> 
    
    <!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다. --> 
    <logger name="jdbc.sqltiming" level="DEBUG"/> 
    
    <!-- ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다. 많은 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않는다. --> 
    <logger name="jdbc.audit" level="OFF"/> 
    
    <!-- ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 매우 방대한 양의 로그가 생성된다. --> 
    <logger name="jdbc.resultset" level="OFF"/> 
    
    <!-- SQL 결과 조회된 데이터의 table을 로그로 남긴다. --> 
    <logger name="jdbc.resultsettable" level="OFF"/>
    
반응형
Comments