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
'개발 > SpringBoot' 카테고리의 다른 글
SpringBoot SpringDoc(OpenAPI)을 이용한 Swagger 그룹화, 전역인증&Parameter 설정 (0) | 2022.08.03 |
---|---|
SpringBoot SpringDoc(OpenAPI)을 이용한 Swagger 적용 (0) | 2022.08.02 |
SpringBoot InMemory DB(H2) 사용 (0) | 2022.05.31 |
SpringBoot Embedded Tomcat 세션 클러스터링 (0) | 2022.05.30 |
SpringBoot @RestControllerAdvice를 통한 예외 처리 (0) | 2022.05.29 |
댓글