스프링부트 서버를 가동시키면 위와 같이 콘솔창에 여러 정보들이 올라가는 것을 확인할 수 있는데, 이를 모두 로그(LOG) 라고 한다.
또한, 각각 다른 색으로 표시되어 있는 INFO, WARN, DEBUG등을 로그의 레벨이라고 한다.
Trace < Debug < Info < Warn < Error
로그의 레벨에는 위와 같이 5가지가 있으며, 상황에 맞추어 혹은 패키지나 클래스에 맞추어도 설정이 가능하다.
데이터베이스에 쿼리가 실행될 때마다 로그로 확인할 수 있도록 설정해보자.
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.resultset | jdbc의 모든 호출 정보를 로그에 남긴다 -> 많은 양의 로그가 발생하므로, 주로 끄고 사용하는 것을 추천함 |
jdbc.audit | 위의 resultset을 제외한 모든 jdbc의 호출 정보를 로그에 남긴다 -> 이 역시 많은 양의 로그가 발생, 끄고 사용하는 것을 추천함. |
jdbc.connection | jdbc 커넥션의 open, close 마다 로그에 남긴다. |
jdbc.sqlonly | 쿼리 문장만을 로그에 남긴다. |
jdbc.sqltiming | 쿼리문과 해당 쿼리를 실행하는데에 시간이 얼마나 걸렸는지 로그에 남긴다. |
나의 경우 쿼리문 + 실행시간과 함께 결과를 테이블로 확인하기 위해 sqlresultsettable 과 sqltiming 로그만을 활성화하려고 한다.
> logback.xml
:
다음과 같이 <logger name = "로그명" level="원하는 레벨"> 의 형태로 작성해줄 수 있다.
앞서 말한 resultsettable 과 sqltiming 의 경우 DEBUG
레벨로, 나머지 옵션들은 OFF
(사용하지 않음) 로 설정했다.
참고로, appender
란 로그 기록을 담당하는 객체로, 로그의 출력 형식이나 위치 등을 설정할 수 있다.
우리는 콘솔에 출력할 것이므로 ConsoleAppender
를 class로 지정해준다.
5) 테스트
모든 설정을 완료했으니, 조회 api를 호출해 콘솔을 확인해보자.다음과 같이, 우리가 설정한 형식대로 출력이 잘 되는 것을 확인할 수 있다.