프로그래밍/Java

intelliJ Springboot + MyBatis, log4jdbc로 console log 설정(2)

소행성왕자 2023. 8. 18. 14:39

build.gradle 추가

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

설정파일 생성

src/main/resources 패키지 경로에 log4jdbc.log4j2.properties 파일을 생성한다.

log4jdbc.log4j2.propertis 내용 추가

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0

log4jdbc.auto.load.popular.drivers=false
log4jdbc.drivers=com.mysql.cj.jdbc.Driver

Mysql Driver 변경(datasource)

[Mysql 커넥션 기존]

driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://접속정보~~~~

[Mysql 커넥션 변경 후]

driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
url: jdbc:log4jdbc:mysql://접속정보~~~~

application.yml

 

server:
  port: 8080

spring:
  datasource:
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
    url: jdbc:log4jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul
    username: username
    password: password


mybatis:
  mapper-locations: classpath:mapper/**.xml


# log4jdbc, Mybatis Console Log
logging:
  level:
    com:
      zaxxer:
        hikari: INFO
    javax:
      sql:
        DataSource: OFF
    jdbc:
      audit: OFF
      resultset: OFF
      resultsettable: INFO  #SQL 결과 데이터 Table을 로그로 남긴다.
      sqlonly: OFF     #SQL만 로그로 남긴다.
      sqltiming: INFO    #SQL과 소요시간을 표기한다.
      connection : OFF  # 커넥션 확인가능
    org:
      hibernate:
        SQL: DEBUG
        type:
          descriptor:
            sql:
              BasicBinder: TRACE

옵션 설명

jdbc.sqlonly - SQL 문을 보여준다.
jdbc.sqltiming - SQL 문과 이 SQL 문을 수행하는 시간(ms)을 같이 보여준다.
jdbc.audit - ResultSet 을 제외한 모든 JDBC 호출 정보를 로그로 보여준다. 상당히 많은 양의 로그가 나오기 때문에 권장하지 않음.
jdbc.resultset - ResultSet 을 포함한 모든 JDBC 호출 정보를 로그로 보여준다. audit 처럼 많은 로그가 나오기 때문에 권장하지 않음.
jdbc.resultsettable - SQL 의 결과로 조회된 데이터를 table 형태로 로그를 보여준다.
jdbc.connection - DB 연결, 연결 해제와 관련된 로그를 보여준다


[속성]
로그 레벨 : TRACE -> DEBUG -> INFO -> WARN -> ERROR -> FATAL 순서

OFF - 사용하지 않음

로그 레벨이 높으면 하위 로그 레벨도 출력이 된다. TRACE가 레벨이 제일 높다.