개발 공부 기록
[Spring] Logback을 사용하여 에러 로깅하기 본문
✔️ Logback 이란?
로깅을 위한 추상화된 인터페이스를 제공하는 Slf4j의 구현체에는 대표적으로 Log4j와 Logback이 있습니다. Logback은 Log4j보다 더 빠르고 효율적인 로깅 솔루션을 제공하는 Java 기반의 로깅 프레임워크입니다. XML 기반의 설정 파일을 사용하며, 설정 파일을 통해 로그 레벨, 출력 형식, 출력 대상 등을 구성할 수 있습니다. Logback은 로그를 출력하는 필터, 스레드 컨텍스트 기반의 로깅, 조건부 로깅과 같은 고급 기능을 내장하고 있으며, SpringBoot에서는 기본적으로 Logback을 지원하기 때문에 별도의 설정없이 사용할 수 있습니다.
Logback의 주요 구성 요소는 아래와 같습니다.
Logger : 로그를 기록하는 주요 인터페이스로, 로그 레벨을 설정하여 어떤 종류의 로그를 기록할 지 결정할 수 있습니다.
Appenders : 로그 이벤트를 출력 대상으로 보내는데 사용됩니다. 파일, 큰솔, 데이터베이스 등에 로그를 출력할 수 있습니다.
Layouts : 로그 메시지의 형식, 타임스탬프의 형태 등 로그 이벤트의 출력 형식을 정의합니다.
📝 로그 레벨은 기본적으로 [trace > debug > info > warn > error] 순이며 디폴트로 info 레벨까지 큰솔에 출력되도록 설정되어 있습니다. 저는 debug 레벨 수준까지의 로그를 확인하고 싶기에 이에 대한 작업을 진행해보겠습니다.
✔️ logback-spring.xml을 통해 큰솔에 로그 출력하기
//application.yml
logging:
level:
root: debug
위와 같이 applicaion.yml(혹은 application.properties)를 통해 큰솔 로그 레벨을 간단히 변경해줄 수 있으나, logback-spring.xml을 통해 Appender, Layout, Filter 등 Logback의 다양한 기능을 세밀하게 조정하여 로그를 처리하는 것이 가능합니다.
resources 아래에 logback-spring.xml 파일을 생성한 후 아래와 같이 작성해줍니다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 콘솔에 log 기록 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative] %-5level ${PID:-} --- [%15.15thread] %-40.40logger{36} : %msg%n</Pattern>
</layout>
</appender>
<!-- log root 레벨 설정 (logging.level.root=info)-->
<root level="debug">
<!-- 참조할 appender 설정 - STDOUT -->
<appender-ref ref="CONSOLE" />
</root>
</configuration>
위 코드를 자세히 살펴보겠습니다.
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
...
</appender>
큰솔에 로그를 출력하기 위해 아래와 같이 appender을 정의하고, 이후 name을 통해 참조하게 됩니다.
<layout class="ch.qos.logback.classic.PatternLayout">
...
</layout>
로그 메세지의 레이아웃을 정의합니다. 여기서는 Pattern 레이아웃을 사용하도록 설정하였습니다.
<Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%logger{36}] - %msg%n</Pattern>
어떠한 패턴을 사용할 것인지 정의해줍니다.
- %d{yyyy-MM-dd HH:mm:ss.SSS} : 로그 이벤트가 발생한 시간
- [%level] : 로그 레벨
- [%thread] - 로그 이벤트가 발생한 스레드 이름
- [%logger{36}] - 로그 이벤트를 발생시킨 주체의 이름을 최대 36자까지만 출력
- %msg : 로그 이벤트의 메시지
✔️ 큰솔 로그에 색상 설정하기
사실 위에서 pattern을 정의하긴 했지만, 스프링부트에서 제공하는 defaults.xml을 참고하여 동일하게 설정해주면 됩니다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<property name="CONSOLE_LOG_PATTERN"
value="[%d{yyyy-MM-dd HH:mm:ss}:%-3relative] %clr(%-5level) %clr(${PID:-}){magenta} %clr(---){faint} %clr([%15.15thread]){faint} %clr(%-40.40logger{36}){cyan} %clr(:){faint} %msg%n"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
</layout>
</appender>
<root level="debug">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
References
'Spring > Development Log' 카테고리의 다른 글
[Spring] Session 기반과 JWT 기반의 인증 (0) | 2023.12.09 |
---|---|
[SpringBoot] 이메일 발송 기능 구현하여 이메일 인증 코드 발송하기 (1) | 2023.12.05 |
[SpringBoot] @Vaild를 통해 회원가입에 Validation 적용 (0) | 2023.12.01 |
[SpringBoot] Spring Security를 통해 회원가입 구현 (0) | 2023.09.27 |
[Spring] Spring Security란? (0) | 2023.09.25 |