해당 글에서는 MyBatis로 처리되는 Query에 대한 Formatting을 적용하기 위해 ‘log4 jdbc-log4j2’를 적용하는 글에 대해 공유합니다.
1) log4jdbc-log4j2
💡 log4jdbc-log4j2
- 자바 애플리케이션에서 ‘JDBC 드라이버를 사용’할 때, SQL문의 실행 로그를 자동으로 기록해 주는 라이브러리입니다. 또한 MyBatis를 사용하는 경우 Query Formatting을 지원하여 실제 실행되는 쿼리에 대해 문자열로 확인이 가능합니다.
- 기본적으로 Log4j2를 지원하며 구현체인 Slf4j에서 사용이 가능하며 SQL을 실행할 때마다 자동으로 로그를 남겨 디버깅과 모니터링을 수행할 수 있습니다. - 해당 버전은 ‘log4 jdbc-remix’의 모든 개선사항을 포함하고 있으며 이후에 출시가 되었습니다. 주로 개발 단계에서 SQL문을 편리하게 보거나 중요한 쿼리의 수행을 위해 사용합니다.
로그4jdbc에서 사용할 로그 델리게이트(Delegate)의 이름을 지정합니다. 이 구성을 통해 로그 델리게이트를 변경할 수 있습니다. 이 코드에서는 SLF4J를 사용하는 net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator가 지정되어 있습니다.
log4jdbc.dump.sql.maxlinelength:
SQL문의 최대 길이를 지정합니다. 이 속성은 SQL문을 자동 줄 바꿈하는 데 사용됩니다. 이 코드에서는 0으로 설정되어 있으므로 SQL문의 길이에 제한이 없습니다.
log4jdbc.spylogdelegator.name
로그4jdbc에서 사용할 로그 델리게이트(Delegate)의 이름을 지정합니다. 이 구성을 통해 로그 델리게이트를 변경할 수 있습니다. 이 코드에서는 SLF4J를 사용하는 net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator가 지정되어 있습니다.
log4jdbc.dump.sql.maxlinelength
SQL문의 최대 길이를 지정합니다. 이 속성은 SQL문을 자동 줄 바꿈하는 데 사용됩니다. 이 코드에서는 0으로 설정되어 있으므로 SQL문의 길이에 제한이 없습니다.
log4jdbc.auto.load.popular.drivers
자주 사용되는 드라이버를 자동으로 로드할지 여부를 지정합니다. 이 코드에서는 true로 설정되어 있습니다.
log4jdbc.trim.sql.enabled
SQL 문의 앞뒤 공백을 자동으로 제거할지 여부를 지정합니다. 이 코드에서는 true로 설정되어 있습니다.
log4jdbc.trim.sql.extrablanklines
SQL 문의 공백 라인을 제거할지 여부를 지정합니다. 이 코드에서는 false로 설정되어 있습니다.
log4jdbc.suppress.generated.keys.exception
SQL 문에서 생성된 키 예외를 억제할지 여부를 지정합니다. 이 코드에서는 false로 설정되어 있습니다.
3. 데이터베이스 연결 설정 : application.properties / x-local.yml
💡 datasource에서 driver-class-name, jdbc-url 속성에 대해서 아래와 같이 수정합니다.
spring:
datasource:
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
url: jdbc:log4jdbc:postgresql://localhost:5432/multiflex
name: X
password: X
4. Log4j2 환경 파일 수정
💡 이전에 작성한 log4j2 글에 이어서 구성을 하였으며 jdbc 관련하여 불필요한 데이터를 제외하고 쿼리 및 파라미터 / 데이터 조회에 대해서만 출력하도록 구성하였습니다.
4) MySQL을 사용하는 경우 경고 메시지 : Loading class 'com.mysql.jdbc.Driver'. This is deprecated.
1. 문제점
💡 문제 메시지
- Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
💡 해당 문제는 ‘com.mysql.jdbc.Driver’를 사용하는것이 deprecated 되었다고 합니다. 그래서 새로운 드라이버 클래스인 ‘com.mysql.cj.jdbc.Driver’를 사용하기를 권고하고 있습니다.
2. 해결방법
💡 위에서 구성한 log4jdbc.log4j2.properties 파일 내에 속성을 추가합니다.
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