스프링 부트의 기본 로그 툴은 Logback이다.
로그 툴을 사용하는 이유는 System.out.print() 를 사용하게 되면 IO리소스를 많이 잡아먹어 속도가 느리며
후에 로그를 파일로 남겨서 확인해야 하기 때문이다.
로그를 잘 남겨놔야지 개발 단계 혹은 운영 단계에서 문제가 발생시 쉽게 잡아 낼 수 있다.
( 특히 SQL 쿼리는 눈에 보여야지 디버깅하기 쉽다. )
1. pom.xml 에 추가
spring starter에 포함 안되어 있는 로깅시 쿼리를 풀로 보여줄 수 있게 해주는 라이브러리를 추가한다.
<!-- log4jdbc -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
2. log4jdbc.log4j2.properties 생성
log4jdbc.log4j2.properties 파일을 classpath 에 생성 후 아래의 설정을 복붙 한다.
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0
3. properties에 datasource를 다음과 같이 변경한다.
spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:mariadb://localhost:3306/project?characterEncoding=UTF-8&passwordCharacterEncoding=utf8
spring.datasource.username=demo
spring.datasource.password=123456
spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:mariadb://localhost:3306/project?characterEncoding=UTF-8&passwordCharacterEncoding=utf8
이 부분을 변경해야지 SQL 로그에 ? 가 파라미터로 변경되어 나온다.
4. application.properties 에 로깅 관련 설정을 해준다.
만약 JPA을 사용 중이라면 JPA에 log 옵션은 꺼야지 중복으로 안 나온다.
properties 설정 방법
logging.level.org.springframework.web=debug
logging.level.sql=error
# hibernate에서 생성하는 SQL 로그 끄기
logging.level.org.hibernate.SQL=off
logging.level.jdbc=error
logging.level.jdbc.sqlonly=debug
#max-history 설정 안하면 디폴트가 30이라 30일 이후의 로그는 자동 삭제된다. 필수로 해야함.
logging.file.max-history=9999999
logging.file.max-size=100MB
logging.file.name=${user.home}/logs/product.log
# 로그 패턴 설정
logging.pattern.console=%-5level %d{yyyy-MM-dd HH:mm:ss}[%thread] [%F - %M] [%logger{0}:%line] - %msg%n
logging.pattern.file= %-5level %d{yyyy-MM-dd HH:mm:ss}[%thread] [%F - %M] [%logger{0}:%line] - %msg%n
yml 설정 방법
logging:
level:
org.springframework.web : debug
sql: error
jdbc: off
jdbc.sqlonly: debug
file : ${user.home}/logs/product.log
file.max-history: 9999999
file.max-size : 100MB
주로 사용하는 옵션을 써둔 것이다.
${user.home} 은 계정의 홈 디렉토리이다. (정상 작동을 안 하면 지우자)
logging.file.max-history를 설정을 안하면 디폴트가 30일이라 30일이 넘은 로그는 삭제한다. ( 운영 중에 삭제되면 큰일이니 꼭 설정을 해야 한다. )
logging.file.max-size 는 로깅 파일이 설정한 용량이 넘어가면 압축해서 저장한다. 기본 값은 설정한_파일명.gz 으로 압축한다.
로그 패턴 설정은 보기 편하게 알아서 수정하면 된다. 파일에 남기는 로그와 콘솔에 남기는 로그가 각각 세팅이 된다.
[ 로깅 패턴 ]
%-5level : 로그 레벨, -5는 출력의 고정폭 값(5글자) (INFO, ERROR, DEBUG , 기타 등등이다.)
%d{날짜 형식 포맷} : 로그 기록시간 %d{yyyy-MM-dd HH:mm:ss} 을 사용하면 된다.
%thread : 현재 Thread 명
%F : 로깅을 발생시킨 파일 명
%M : 로깅을 발생시킨 메소드 명
%logger{length} : Logger name을 축약할 수 있다. length는 최대 자릿수이다 (0 = 무제한)
%line : 로깅이 발생된 라인 넘버
%msg : - 로그 메시지
%n : 줄바꿈(new line)
이 외에도 여러 가지가 있다. ( http://logback.qos.ch/manual/layouts.html )
위와 같은 설정 추가로 sql이 console 에 찍히는 걸 확인.!
'SPRING BOOT' 카테고리의 다른 글
Spring Boot 프로젝트 외부 경로에 있는 파일 접근(addResourceHandlers) (0) | 2023.06.01 |
---|---|
[Spring Boot] SMS 전송 - Naver API (0) | 2023.02.20 |
[springboot] devtools 자동 재시작 (0) | 2023.02.09 |