Spring Maven Project SQL(query) log 설정

2024. 2. 14. 10:36Spring

쿼리 로그 콘솔 출력 방법

 

1. pom.xml 추가

<dependency>
    <groupId>org.bgee.log4jdbc-log4j2</groupId>
    <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
    <version>1.16</version>
</dependency>

 

2. resources 폴더에 log4jdbc.log4j2.properties 파일 생성 후 추가

#log4jdbc spy의 log event를 slf4j를 통해 처리
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
#로그를 최대 몇줄까지 출력할 것인지 제한 0으로 설정 시 무제한
log4jdbc.dump.sql.maxlinelength=0

 

3, application.properties 설정 변경

#기존 설정에서 변경
spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:mariadb://localhost:3306/test

 

4. logback.xml 설정

<configuration>
//콘솔에 로그 출력
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{yyyyMMdd HH:mm:ss.SSS} [%thread] %-3level %logger{5} - %msg %n</pattern>
    </encoder>
  </appender>
  
  //log4jdbc 옵션 설정
  <logger name="jdbc" level="OFF"/>
  //sql문만 로깅할지 여부
  <logger name="jdbc.sqlonly" level="OFF"/>
  //쿼리문 수행시간 로깅 여부
  <logger name="jdbc.sqltiming" level="DEBUG"/>
  //resultset외 모든 jdbc 호출 정보 로깅 여부
  <logger name="jdbc.audit" level="OFF"/>
  //resultset 포함 모든 jdbc 호출 정보 로깅
  <logger name="jdbc.resultset" level="OFF"/>
  <logger name="jdbc.resultsettable" level="DEBUG"/>
  //connection open close 로깅 여부
  <logger name="jdbc.connection" level="OFF"/>
  
  <root level="INFO">
    <appender-ref ref="STDOUT" />
  </root>
  
</configuration>

 

옵션 정리

 * jdbc.sqlonly : SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여진다. 
 * jdbc.sqltiming : SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다. 
 * jdbc.audit : ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다. 많은 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않는다. 
* jdbc.resultset : ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 매우 방대한 양의 로그가 생성된다. 

* jdbc.resultsettable : SQL 결과 조회된 데이터의 table을 로그로 남긴다.