본문 바로가기
💻 하나씩 차곡차곡/Back-end

[스프링부트(Spring boot)/Log4jdbc] 콘솔창에 쿼리문 + 테이블형태 결과값 로그 남기기

by 뚜루리 2024. 6. 11.
728x90
320x100

 

오늘은 아래와 같이 콘솔창에 쿼리문이랑 결과값이 테이블 형태로 예쁘게(?) 찍히는 걸 해보겠음. 

 

[참고]

  • 스프링부트에서는 자체적으로 Log관련들을 제공하고 application.properties를 수정하면 로그에 쿼리문이 찍힐 수 있도록 제공하기는한데 쿼리문이 뭔, 한줄로 주르르르륵 찍혀가지고 안보느니만 못한 형태로 나옴. 그래서 나는 Log4jdbc 를 Dependency에 추가하여 위와 같이 조금 더 편리하게 볼 수 있도록 할 예정!
  • 나는 스프링부트 3.2.6 버전 / Mybatis / gradle / IntelliJ 을 사용하고 있기 때문에 이 스택에 맞춰 해볼 것임.

 

1. build.gradle 수정

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
	implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16' /*이 부분 추가!*/
	compileOnly 'org.projectlombok:lombok'
	runtimeOnly 'com.mysql:mysql-connector-j'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.3'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

Log4jdbc를 Dependency에 추가해준다.

 

 

2. application.properites 수정

spring.datasource.url: jdbc:mysql://localhost:3306/KNOU_CBT?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver

수정 전에 위와 같이 설정되어 있었다면

 

spring.datasource.url: jdbc:log4jdbc:mysql://localhost:3306/KNOU_CBT?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy

위와 같이 수정해준다.  

 

spring.datasource.url: jdbc:log4jdbc:mysql://localhost:3306/KNOU_CBT?serverTimezone=UTC&characterEncoding=UTF-8

spring.datasource.driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy

다르지 않은것 같지만 다름! 잘 봐야함.

 

 

3. log4jdbc.log4j2.properties 생성

  • og4jdbc.log4j2.properties 이름의 파일을 하나 생성해준다.
  • 생성경로는 resources 바로 아래 만들어 주면 됨.

 

log4jdbc.spylogdelegator.name = net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength = 0

안에 내용은 위와 같이 입력한다.

첫줄은 가장 기본적으로 해줘야 하는 것 같고, 두번째 줄은 쿼리를 최대 몇줄까지 보여줄 건가 에 대한 설정인데 0으로 하면 그냥 길이 제한 없이 다 출력된다 그래서 나는 0으로 적어둠.

 

그런데, 여기까지만 해놓고 돌려봐도 쿼리가 잘 뜨는데 불 필요한 로그까지 엄청 뜸.

그래서 로그에 대한 설정을 해줘야 함. 

 

4. logback-spring.xml 생성

  • 로그에 대한 설정을 해주는 파일이 바로 logback-spirng.xml 임
  • 이파일도 resources밑에 바로 만들어줌.

 

<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>

    <logger name="jdbc" level="OFF"/>

    <logger name="jdbc.sqlonly" level="OFF"/>
    <logger name="jdbc.sqltiming" level="DEBUG"/>
    <logger name="jdbc.audit" level="OFF"/>
    <logger name="jdbc.resultset" level="OFF"/>
    <logger name="jdbc.resultsettable" level="DEBUG"/>
    <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을 로그로 남긴다.

해당 내용은 https://www.leafcats.com/45 블로그의 내용을 그대로 인용하였습니다. 

 

이렇게 해주면, 아래와 같이 쿼리문과 테이블이 예쁘게 뜬다~

 

 


출처 및 참고 - https://www.leafcats.com/45

 

Spring boot SQL Log설정 (Log4jdbc를 사용한 쿼리 로그)

spring boot상에서 Log4jdbc를 사용해 실행된 쿼리 로그를 효과적으로 확인하고 분석할 수 있는 방법을 알아보자. Spring boot는 자체적으로 log4j등 여러 종류의 logging API를 제공하고, apprication.properties에

www.leafcats.com

 

728x90
320x100