Framework & Library/Spring Boot

Spring Boot - Logback 적용하기

임빈영 2022. 2. 9. 12:24

Logback

Logback이란?

 - Logback이란 Log4j를 기반으로 개발된 로깅(Logging) 라이브러리이다.

 - Log4j에 비해 약 10배 정도 빠른 퍼포먼스를 자랑하며, 메모리 효율성이 높다

 - 출시 순서 : Log4j Logback → Log4j2

 

Logback 특징

 - 로그에 특정 레벨을 설정할 수 있다. 따라서, 실 운영과 테스트 상황에서 각각 다른 출력 레벨을 설정하여 로그를 확인이 가능하다.

 - 개발자가 선호하는 출력 방식을 설정할 수 있다.

 - 설정 파일을 일정 시간마다 스캔하여 관리하기 때문에, 애플리케이션의 중단 없이 설정의 변경이 가능하다.

 - 별도의 프로그램 없이 자체적으로 로그 압축을 지원한다.

 - 로그 보관 기간을 설정할 수 있다.

 

로그 레벨
Trace → Debug → Info → Warn → Error

 

1. Trace : Debug 레벨보다 더 디테일한 메시지를 표현하기 위한 레벨

2. Debug : 애플리케이션의 디버깅을 위한 메시지 레벨

3. Info : 상태 변경과 같은 정보성 메시지를 의미

4. Warn : 시스템 에러의 원인이 될 수 있는 경고성 레벨, 처리가 가능한 사항을 의미

5. Error : 로직 수행 중에 오류가 발생한 경우, 시스템적으로 심각한 문제가 발생하여 작동이 불가한 경우

 

Logback 설정 파일의 형식

 

1. appender

 - 로그의 형태 및 어디에 출력할지 설정하기 위한 영역이다.

 - 대표적인 appender 형식은 아래와 같다.

     ConsoleAppender : 콘솔에 로그를 출력하는 방식

     FileAppender : 파일에 로그를 출력하는 방식

     RollingFileAppender : 여러 개의 파일을 순회하며 로그를 저장하는 방식

     SMTPApender : 로그를 메일로 보내는 방식

     DBAppender : DB에 로그를 저장하는 방식

 

2. encoder

 - appender 내에 포함되는 항목이며, pattern을 사용하여 원하는 형식으로 로그를 표현할 수 있다.

 

3. root

 - 설정한 appender를 참조하여 로그의 레벨을 설정할 수 있다.

 - root 태그는 전역 설정이며, 지역 설정을 하기 위해서는 logger 태그를 사용한다.

 

로그 패턴
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] %logger %msg %n</pattern>
패턴 의미
%Logger{length} Logger Name
%-5level 로그 레벨, -5는 출력의 고정폭 값
%msg 로그 메세지 영역
%{PID:-} Process id
%d 로그 기록 시간
%p 로깅 레벨
%F 로깅이 발생한 프로그램 파일명
%M 로깅이 발생한 메서드의 이름
%I 로깅이 발생한 호출지의 정보
%L 로깅이 발생한 호출지의 라인 수
%thread 현재 Thread 이름
%t 로깅이 발생한 Thread 이름
%c 로깅이 발생한 카테고리
%C 로깅이 발생한 클래스 이름
%m 로그 메시지
%n 줄바꿈
%% % 출력
%r 애플리케이션 실행 후 로깅이 발생한 시점까지의 시간

Logback 적용

logback-spring.xml 파일 생성
<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="true" sanPeriod="30 seconds">

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] %logger{30} %msg %n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="console"/>
    </root>
</configuration>

 - Spring Boot에는 기본적으로 Logback이 포함되어 있다. 따라서, 별도의 설치가 필요 없이 사용이 가능하다.

 - src/main/resources 위치에 logback-spring.xml 파일을 생성하고 위 코드를 작성함으로써, 로그 출력에 대한 추가적인 설정이 가능하다.

 

ProductController 클래스 변경

 

 - ProductController 클래스 내 getProduct() 메서드의 로그를 출력하기 위해 위와 같은 코드를 추가해준다.

 - 로깅을 하기 위해서는 Logger 객체를 얻어야 하는데, LoggerFactory.getLogger() 메서드를 통해서 얻을 수 있다.

 - LOGGER.info() 메서드를 사용해서 Info 레벨의 로그들을 출력할 수 있도록 설정한다.

 

테스트

 

 - getProduct() 메서드에 대한 API를 호출하기 위해 Postman을 통해서 요청을 수행한다.

 

 

 - getProduct() 메서드에 대한 API를 호출하면 위와 같은 로그가 콘솔에 출력됨을 확인할 수 있다.


 

GitHub - qlsdud0604/spring-boot-study

Contribute to qlsdud0604/spring-boot-study development by creating an account on GitHub.

github.com

 

728x90