[스프링부트] 로그로 쿼리 확인하기(Gradle)

minji·2021년 8월 18일
0

스프링부트 서버를 가동시키면 위와 같이 콘솔창에 여러 정보들이 올라가는 것을 확인할 수 있는데, 이를 모두 로그(LOG) 라고 한다.

또한, 각각 다른 색으로 표시되어 있는 INFO, WARN, DEBUG등을 로그의 레벨이라고 한다.

Trace < Debug < Info < Warn < Error

로그의 레벨에는 위와 같이 5가지가 있으며, 상황에 맞추어 혹은 패키지나 클래스에 맞추어도 설정이 가능하다.

1. 쿼리를 로그로 출력하기

데이터베이스에 쿼리가 실행될 때마다 로그로 확인할 수 있도록 설정해보자.

1) log4jdbc-log4j2 라이브러리 추가

화면과 같이 build.gradle에 log4jdbc-log4j2 라이브러리를 추가해준다. (추가 후 refresh gradle 꼭 해주기)

2) datasource url 및 driver-class-name 변경

다음으로, application.yml의 설정을 다음과 같이 변경해준다.

변경 전:

변경 후:

url의 jdbc:mysql > jdbc:log4jdbc:mysql
driver-class-name의 com.mysql.jdbc.Driver > net.sf.log4jdbc.sql.jdbcapi.Driverspy

이렇게 두가지를 변경해주면 됨!

3) log4jdbc.log4j2.properties 파일 생성

src>main>resources 하위에 log4jdbc.log4j2.properties 파일을 추가해준다.
이후, 파일 내에 다음과 같이 작성한다.

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

4) logback.xml 파일 생성

이제, log를 출력할 수 있는 환경은 모두 설정했으니 로그의 종류에 따라 출력할 수 있도록 logback.xml 파일을 생성한다.

위의 properties 파일과 마찬가지로 src>main>resources 하위에 생성한다.

파일을 생성했다면, 로그의 종류에 따라 5단계의 레벨 중 어느 레벨에 맞추어 출력할지 설정해준다.
로그의 종류는 아래와 같다.

- 로그의 종류

로그명
jdbc.resultsettable쿼리의 결과로 가져온 데이터를 테이블 형태로 로그에 남긴다.
jdbc.resultsetjdbc의 모든 호출 정보를 로그에 남긴다
-> 많은 양의 로그가 발생하므로, 주로 끄고 사용하는 것을 추천함
jdbc.audit위의 resultset을 제외한 모든 jdbc의 호출 정보를 로그에 남긴다
-> 이 역시 많은 양의 로그가 발생, 끄고 사용하는 것을 추천함.
jdbc.connectionjdbc 커넥션의 open, close 마다 로그에 남긴다.
jdbc.sqlonly쿼리 문장만을 로그에 남긴다.
jdbc.sqltiming쿼리문과 해당 쿼리를 실행하는데에 시간이 얼마나 걸렸는지 로그에 남긴다.

나의 경우 쿼리문 + 실행시간과 함께 결과를 테이블로 확인하기 위해 sqlresultsettablesqltiming 로그만을 활성화하려고 한다.


> logback.xml :

다음과 같이 <logger name = "로그명" level="원하는 레벨"> 의 형태로 작성해줄 수 있다.

앞서 말한 resultsettable 과 sqltiming 의 경우 DEBUG 레벨로, 나머지 옵션들은 OFF(사용하지 않음) 로 설정했다.

참고로, appender 란 로그 기록을 담당하는 객체로, 로그의 출력 형식이나 위치 등을 설정할 수 있다.
우리는 콘솔에 출력할 것이므로 ConsoleAppender 를 class로 지정해준다.

5) 테스트

모든 설정을 완료했으니, 조회 api를 호출해 콘솔을 확인해보자.다음과 같이, 우리가 설정한 형식대로 출력이 잘 되는 것을 확인할 수 있다.

profile
SW Engineer

0개의 댓글