본문으로 바로가기

[Spring] MyBatis Log 설정하기

category Framework/Spring 2021. 12. 16. 16:02

MyBatis 는 내부 로그 팩토리를 사용하여 로깅 정보를 제공한다. 내부 로그 팩토리는 로깅정보를 다른 로그 구현체 중 하나에 전달한다.

로깅 솔루션은 내부 마이바티스 로그 팩토리의 런타임 체크를 통해 선택된다. 마이바티스 로그 팩토리는 가능하면 첫번째 구현체를 사용할 것이다(위 로깅 구현체의 나열 순서는 내부적으로 선택하는 우선순위이다). 만약 마이바티스가 위 구현체중 하나도 찾지 못한다면 로깅을 하지 않을 것이다.

 

이 포스트에서는 Log4J를 통한 로그 세팅 방법에 대해 기술한다.

 

log4jdbc 의존성 추가 (Gradle 기준)

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

 

datasource 관련 설정을 아래와 같이 수정

    
    # driver-class-name: org.mariadb.jdbc.Driver
    # url: jdbc:mariadb://localhost:3306/dbname
    
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
    url: jdbc:log4jdbc:mariadb://localhost:3306/dbname

로그 관련 설정

properties 파일을 사용하는 경우

# 로그 관련 설정
logging.level.jdbc.sqlonly=off
logging.level.jdbc.sqltiming=info
logging.level.jdbc.resultsettable=info
logging.level.jdbc.audit=off
logging.level.jdbc.resultset=off
logging.level.jdbc.connection=off

logback.xml 파일을 사용하는 경우

<configuration> 
  <logger name="jdbc.sqlonly" level="OFF"/> 
  <logger name="jdbc.sqltiming" level="info"/> 
  <logger name="jdbc.resultsettable" level="info"/>
  <logger name="jdbc.audit" level="OFF"/>
  <logger name="jdbc.resultset" level="OFF"/>
  <logger name="jdbc.connection" level="OFF"/>
</configuration>
  • 로그 설정 상세내용
    • jdbc.sqlonly - SQL 문을 보여준다.
    • jdbc.sqltiming - SQL 문과 이 SQL 문을 수행하는 시간(ms)을 같이 보여준다.
    • jdbc.audit - ResultSet 을 제외한 모든 JDBC 호출 정보를 로그로 보여준다. 상당히 많은 양의 로그가 나오기 때문에 권장하지 않음.
    • jdbc.resultset - ResultSet 을 포함한 모든 JDBC 호출 정보를 로그로 보여준다. audit 처럼 많은 로그가 나오기 때문에 권장하지 않음.
    • jdbc.resultsettable - SQL 의 결과로 조회된 데이터를 table 형태로 로그를 보여준다.
    • jdbc.connection - DB 연결, 연결 해제와 관련된 로그를 보여준다
  • 속성값 내용
    • ex) warn 으로 설정한 경우 이전 레벨인 debug, info 로그는 출력하지 않음.
    • 따라서 개발하면서 계속 로그를 추적하고 싶은 경우 debug, info 로 설정하는 편을 권장.
    • off - 사용하지 않음
    • info - 정보성 로그
    • warn - 경고성 로그
    • error - 에러 로그
    • fatal - 심각한 문제 로그

log4jdbc.log4j2.properties 생성 및 설정

  • src/main/resources 폴더 하위에 log4jdbc.log4j2.properties 이름으로 파일 생성 후 아래 내용 기재.
    • maxlinelength 부분은 SQL 문을 몇줄까지 출력할지를 지정할 수 있으며, 0 이면 무제한.
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0

spring.profiles.active 를 통한 환경별 설정 분기

logback-local.xml / logback-dev.xml / logback-qa.xml / logback-production.xml 로 각 환경별 파일을 생성한다.

그리고 application.properties (또는 application.yml) 파일에 아래와 같이 환경별 파일을 참조하도록 명시한다.

logging:
  config: classpath:logback-${spring.profiles.active}.xml

'Framework > Spring' 카테고리의 다른 글

[Spring] Swagger 3  (0) 2022.01.11
[Spring] Filter & Interceptor  (0) 2021.12.22
[Spring] Get Request 의 파라미터를 객체로 받을 때의 Case Convert  (0) 2021.12.15
[Spring] MyBatis 연동  (0) 2021.12.06
[Spring] Unit Test  (0) 2021.12.06