티스토리 뷰
중요한 일은 아니지만 개발환경을 만드는 입장에서 어떻게 하면 조금 더 로그를 가독성이 좋게 보여줄 수 있을까 고민을 했고 출력 로그의 색상을 바꿔보기로 하였다.
바쁜 사람을 위해 결론부터 말하면 색상을 변경하기 위해서는 다음과 같이 하면 된다.
logback-spring.xml
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
... 생략 ...
로그 패턴 정의 중 출력할내용을 %clr(출력할내용){red} 로 감싸준다. red 말고 다른 색상으로 대체 가능
다음은 출력로그의 색상을 변경하는 원리와 상세 적용 방안이다.
위의 AProject는 가장 기본적인 Springboot project의 모습이다. logback-spring.xml 파일은 물론이고 application.properties에도 로그에 대한 설정은 없다. 이 프로젝트를 실행시키면 다음과 같은 모습으로 로그가 출력된다.
내가 설정하지도 않았는데 예쁘게 출력이 된다. 기존에 springboot migration logback 포스팅을 하면서도 잠깐 다뤘지만 이건 spring-boot.jar > org.springframework.boot.logging.logback 패키지 안에있는 logback 설정파일들을 통해 이렇게 되는 원리에 대해 이해를 할 수 있다.
defaults.xml
<included>
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<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="CONSOLE_LOG_CHARSET" value="${CONSOLE_LOG_CHARSET:-default}"/>
<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}}"/>
<property name="FILE_LOG_CHARSET" value="${FILE_LOG_CHARSET:-default}"/>
<logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
<logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
<logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
<logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>
<logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
<logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
<logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
<logger name="org.springframework.boot.actuate.endpoint.jmx" level="WARN"/>
</included>
base.xml
<included>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</included>
이 두개의 included 되는 파일들을 보면 springboot의 기본 log 설정이 이렇게 이루어져 있구나 알 수 있다.
그럼 이중 색상을 변경하는 역할은 누가 할까? defaults.xml 의 맨 위에 conversionRule의 clr의 class가 ColorConverter임을 미루어보아 이 clr이 색상 변경을 하는 키워드구나 하는것을 짐작할 수 있다.
그 아래 CONSOLE_LOG_PATTERN을 보면 여기서부터 clr이 사용되고 있다. LOG_DATEFORMAT_PATTERN 을 정의할때 %clr(LOG_DATEFORMAT_PATTERN){faint} 라고 정의를 한 것을 볼 수 있다. faint는 검정색을 의미한다. 만약 내가 날짜에 대한 부분을 다른 색으로 변경을 하고 싶으면 위의 Logback 설정 내용을 오버라이드 해서 logback-spring.xml 에 작성을 해줘야 한다.
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){green} %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="CONSOLE_LOG_CHARSET" value="${CONSOLE_LOG_CHARSET:-default}"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>${CONSOLE_LOG_CHARSET}</charset>
</encoder>
</appender>
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
<logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
<logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
<logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>
<logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
<logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
<logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
<logger name="org.springframework.boot.actuate.endpoint.jmx" level="WARN"/>
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
내 프로젝트의 resources 하위에 logback-spring.xml 파일을 만들었고 spring-boot logback에서 기본으로 제공되는 내용중 CONSOLE appender 관련된 부분만 가지고 와서 customizing을 하기 위한 준비를 끝냈다. 기본적으로 %clr(LOG_DATEFORMAT_PATTERN){faint} 로 되어 있는 부분을 %clr(LOG_DATEFORMAT_PATTERN){green} 으로 변경을 하고 다시 기동을 했다.
DATE 관련 부분의 색상이 초록색으로 변경된 것을 확인할 수 있다. 이런식으로 %clr을 이용해서 내가 원하는대로 색상을 변경할 수 있다.
지원되는 색상의 목록은 blue, cyan, faint, green, magenta, red, yellow 이다.
조금 예외라고 할 점은 Log level 에 해당하는 부분은 %clr(%5p) 로 표현을 하면 위처럼 log level 에 따라 색상이 변해서 출력이 된다. log level 별 색상은 다음과 같다.
Level |
Color |
FATAL |
Red |
ERROR |
Red |
WARN |
Yellow |
INFO |
Green |
DEBUG |
Green |
TRACE |
Green |
기본으로 되어 있는것을 사용해도 되지만 springboot의 기본 로그처럼 알록달록한 로깅이 생각난다면 위와 같은 방식으로 바꿔서 울적한 개발자라이프를 조금이라도 즐겁게 환경을 바꿔보자
끝!
'Framework > Logging' 카테고리의 다른 글
log4j2, log4j, logback 보안 취약점 조치사항 (0) | 2021.12.21 |
---|---|
log masking 하기 (with springboot + logback) (0) | 2021.08.20 |
Logback include 사용하여 가독성 높이기 (0) | 2021.01.19 |
log4j에서 slf4j + logback 으로 전환하기 (0) | 2020.08.07 |
Logback 이란? 설정방법 및 사용방법 (0) | 2020.07.14 |