본문 바로가기

Programing/Framework

[springboot] 기본 로깅 형식

MDC를 추가하기 위해 기본 로깅 형식을 알아야 했는데 MDC를 추가하기도 전에 이상하게 포맷이 찍혀서 작업을 진행하지 못했다.


기본 로깅형식 정보는 DefaultLogbackConfiguration 파일 혹은 spring-boot-x.y.z.jar 의 org.springframework.boot.logging.logback 아래에 default.xml에 정의 되어 있다.

class DefaultLogbackConfiguration {

private static final String CONSOLE_LOG_PATTERN = "%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} "
+ "%clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} "
+ "%clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} "
+ "%clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}";

private static final String FILE_LOG_PATTERN = "%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} "
+ "${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}";

private static final String MAX_FILE_SIZE = "10MB";

사실 default.xml 파일이 한줄로 쭉 되어 있어서 얘를 가져다 썼더니아래와 같이 이상하게 찍힌다.


<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>


왜냐하면 java 파일의 형식과 달리 치환할 수 있도록 ${이름: -기본값}의 형태로 쓰여져 있기 때문이다.


결국 코드를 이해하고 나서야 아래와 같이 기본 형식을 알아낼 수 있었다.


application.yml

console: '%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx'

file: '%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } --- [%t] %-40.40logger{39} : %m%n%wEx'


%clr이 뭔가 했더니 콘솔에서 색상(color)을 찍기 위한 문법이었다. 레퍼런스에 잘 나타나 있다.



https://www.logicbig.com/tutorials/spring-framework/spring-boot/logging-console-pattern.html

문서를 보면 잘 설명되어 있다.