23. Log4jdbc를 이용해 Query 로그 기록하기
로그 레벨
TRACE > DEBUG > INFO > WARN > ERROR
로그 레벨은 TRACE로 갈 수록 표현되는 Log의 양이 많아지고 ERROR로 갈 수록 표현되는 Log의 양이 적어진다.
Configure 파일 문법
Logback Configure파일을 구성하는 3가지 태그가 있다.
appender
- 로그의 출력 위치, 출력 형식및 로깅에 대한 설정(ex. 기간, 용량 등)을 지정한다
root
- 전역적인 로그 설정을 위해 사용한다.
- appender를 사용해 appender에 정의된 형식과 위치로 로그를 출력
- 여러개의 appender를 사용할 수 있다.
logger
- root와는 반대로 class나 Package단위로 Logging 정책을 설정할 수 있다.
- 로그 메시지를 작성하기 위해 사용하는 클래스를 명시하고 appender를 사용해 appender에 정의된 형식과 위치로 로그를 출력한다.
- 여러개의 appender를 사용할 수 있다.
appender 클래스의 종류
ch.qos.logback.core.ConsoleAppender
- 콘솔에 로그를 찍음
ch.qos.logback.core.FileAppender
- 파일에 로그를 찍음
ch.qos.logback.core.rolling.RollingFileAppender
- 여러개의 파일을 순회하면서 로그를 찍음
ch.qos.logback.classic.net.SMTPAppender
- 로그를 메일에 찍어 보냄
ch.qos.logback.classic.db.DBAppender
- 데이터베이스에 로그를 찍음
의존성 추가하기
쿼리 로그를 저장하기 위해서는 log4jdbc 의존성을 추가해줄 필요가 있다.
build.gradle
implementation group: 'com.integralblue', name: 'log4jdbc-spring-boot-starter', version: '2.0.0' |
설정 추가하기
jdbc.sqlonly
- SQL문만을 로그로 남긴다.
jdbc.sqltiming
- SQL문과 해당 SQL을 수행한 시간을 로그로 남긴다.
jdbc.audit
- ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다.
- 많은 양의 로그를 생성하므로 JDBC 문제를 추적해야 할 필요를 죄외하고는 사용하지 않는다.
jdbc.resultset
- ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남긴다.
- 많은 양의 로그를 생성하므로 JDBC 문제를 추적해야 할 필요를 죄외하고는 사용하지 않는다.
jdbc.resultsettable
- SQL문을 수행한 후 조회된 table을 로그로 남긴다.
logback-spring.xml
|
DataBase 접속 설정 추가하기
DataBase 접속 URL과 Driver를 변경해줄 필요가 있다. URL에서는 jdbc하고 접속하고 싶은 DB사이에 log4jdbc를 추가해주면 된다. Driver는 log4jdbc에서 제공해주는 Driver를 사용하면 된다.
url
: jdbc:log4jdbc:h2:mem:testdbdriver-class-name
: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
appplication.yml
datasource: |
Console에 SQL문이 찍히는 것을 확인할 수 있다. 이상하게 Memory DB를 사용하는 경우 SQL문이 중복으로 찍힌다.
MySQL 접속 설정 변경하기
H2 DataBase했던 것과 마찬가지로 Driver와 URL을 변경해준다.
application-mysql.yml
spring: |
Create시 engine=InnoDB가 나타난 것을 보아 MySQL을 이용한 SQL문이 제대로 생성됨을 알 수 있다.
파일에 Log 출력하기
파일에 로그를 남기기 위해 appender 클래스로 ch.qos.logback.core.FileAppender를 사용할 것이다.
로그파일을 관리하는 정책 세우기
rollingPolicy 태그를 이용해 로그파일을 관리하는 정책을 세울 수 있다.
rollingPolicy
ch.qos.logback.core.rolling.RollingFileAppender
- 일자별로 로그파일을 관리한다.
- 일자가 바뀌면 fileNamePattern에 따라 별도의 로그파일이 생성된다.
timeBasedFileNamingAndTriggeringPolicy
- 일자 외에도 파일의 용량에 따라 별도의 로그파일이 생성된다.
- maxFileSize보다 로그 파일의 크기가 커지면 별도의 로그파일이 생성된다.
logback-spring.xml
|
logs라는 폴더가 생성되고 여기에 logback.log라는 파일이 생성되 로그가 찍히는 것을 확인할 수 있다.
logback.log