티스토리 뷰

중요한 일은 아니지만 개발환경을 만드는 입장에서 어떻게 하면 조금 더 로그를 가독성이 좋게 보여줄 수 있을까 고민을 했고 출력 로그의 색상을 바꿔보기로 하였다. 

 

바쁜 사람을 위해 결론부터 말하면 색상을 변경하기 위해서는 다음과 같이 하면 된다. 

 

logback-spring.xml

<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
... 생략 ...

로그 패턴 정의 중 출력할내용을 %clr(출력할내용){red} 로 감싸준다. red 말고 다른 색상으로 대체 가능

다음은 출력로그의 색상을 변경하는 원리와 상세 적용 방안이다. 

 

springboot project basic

위의 AProject는 가장 기본적인 Springboot project의 모습이다. logback-spring.xml 파일은 물론이고 application.properties에도 로그에 대한 설정은 없다. 이 프로젝트를 실행시키면 다음과 같은 모습으로 로그가 출력된다.

 

springboot basic log 

내가 설정하지도 않았는데 예쁘게 출력이 된다. 기존에 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} 으로 변경을 하고 다시 기동을 했다. 

 

logback log 색상 변경

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의 기본 로그처럼 알록달록한 로깅이 생각난다면 위와 같은 방식으로 바꿔서 울적한 개발자라이프를 조금이라도 즐겁게 환경을 바꿔보자

 

끝!

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31