Just Do IT!
SpringBoot에서 Log4jdbc 사용하기 본문
728x90
반응형
log4jdbc-log4j2란?
- 자바 어플리케이션에서 JDBC 드라이버를 사용할 때 SQL문의 실행 로그를 자동으로 기록해주는 라이브러리이다.
- MyBatis를 사용하는 경우 Query Formatting을 지원하여 실제 실행되는 쿼리에 대해 문자열로 확인이 가능하다.
- MyBatis는 내부적으로 JDBC의 PreparedStatement를 이용해서 SQL을 처리한다.
- 따라서 SQL에 전달되는 파라미터는 JDBC에서와 같이 '?' 로 치환되어서 처리된다.
- SQL 로그를 제대로 보기 위해서는 이 라이브러리를 사용해야 한다.
- 구현체인 Slf4j에서 사용이 가능하며 SQL문을 실행할 때마다 자동으로 로그를 남겨 디버깅과 모니터링을 할 수 있다.
개발 단계에서 SQL문을 편리하게 보거나 중요한 쿼리의 수행을 보기 위해 사용한다.
Log4jdbc 적용해보기
1. build.gradle에 log4j 의존성 추가
위 링크에서 log4j를 검색해서 나오는 implements를 추가하면 된다.
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
2. resoures/application.properties 파일에서 datasource 수정
수업 들으면서 게시판 만들기 실습을 진행했는데, 위가 datasource를 수정한 예시이다.
log4jdbc를 사용하도록 driver-class-name과 url을 수정해주었다.
아래는 로그 설정에 대한 부연 설명이다.
- jdbc.sqlonly
- SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여진다.
- jdbc.sqltiming
- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다.
- jdbc.audit
- ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다. 많은 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않는다.
- jdbc.resultset
- ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 매우 방대한 양의 로그가 생성된다.
- jdbc.resultsettable
- SQL 결과 조회된 데이터의 table을 로그로 남긴다.
- jdbc.connection
- 열려있는 모든 번호와 연결 수립 및 해제 이벤트를 기록. 이는 연결 문제를 찾아내는데 매우 유용 (Connection Pool 설정)
위의 로그 설정은 lob4jdbc 커스텀 설정 파일을 따로 만들어서 할 수도 있다.
logback.xml 파일 생성 후 xml 형식으로 로그 설정을 해줘도 된다.
그렇지만 수업에서는 간단하게 application.properties vkdlfdptj
3. resoures/ 내에 log4jdbc.log4j2.properties 파일 생성
- log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
- log4jdbc가 로그를 기록할 때 사용할 로그 delegator를 지정
- log4jdbc의 로그 메시지가 SLF4J를 통해 출력되도록 지정
- log4jdbc.dump.sql.maxlinelength=0
- 로그에 출력되는 SQL 쿼리의 최대 길이를 제어한다.
- 0으로 설정하면, SQL 쿼리가 길더라도 줄 바꿈 없이 전체 쿼리가 로그에 출력된다.
- 즉, 쿼리의 길이에 제한을 두지 않고, 가능한 한 긴 쿼리도 한 줄로 기록된다.
- log4jdbc.auto.load.popular.drivers=false
- log4jdbc가 자동으로 일반적으로 사용되는 JDBC 드라이버를 로드하지 않도록 지정
- false로 설정하면, 이러한 자동 로딩 기능이 비활성화되므로 사용자가 직접 드라이버를 지정해야 한다.
- log4jdbc.drivers=com.mysql.cj.jdbc.Driver
- com.mysql.cj.jdbc.Driver는 MySQL 데이터베이스에 연결하기 위한 JDBC 드라이버
- 이 설정을 통해 log4jdbc는 MySQL 데이터베이스와 연결할 때 해당 드라이버를 사용하도록 지정
4. Refresh, Rebuild
의존성을 추가해주었기 때문에, gradle를 refresh해줘야 한다.
(이거 안해서 오류가 나서 알게 되었다...ㅋㅋ)
그 다음에 다시 Rebuild project하고 localhost:8080에 들어가본다면 정상적으로 연결되었음을 알 수 있다.
이렇게 sql문의 실행 결과가 나오게 된다.
각각의 sql문을 실행할 때마다 콘솔에 다르게 찍히게 나오니까 개발 과정에서 유용하게 사용할 수 있다.
728x90
'개발 공부 > Spring' 카테고리의 다른 글
[JPA] @EnableJpaAuditing 사용하기 (0) | 2024.08.22 |
---|---|
SpringBoot, JPA 구조 이해하기 (0) | 2024.08.21 |
[Spring] 외부의 정적 리소스 요청 시 WebMvcConfigurer 사용하기 (0) | 2024.08.20 |
[Spring] ResponseEntity란? (0) | 2024.08.13 |
[Spring] DB Connection Pool과 Hikari CP란? (0) | 2024.08.12 |