본문 바로가기
BackEnd/Project

[RealPJ] Ch02. Log를 관리하기 위한 Logback 설정

by 개발 Blog 2024. 8. 31.

공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.

 

Logback

개념

Logback은 SLF4J(Simple Logging Facade for Java)라는 인터페이스를 구현하는 구현체이다.

 

SLF4J는 단순한 Facade 패턴을 통해 자바 로깅 API를 제공하며, 런타임 시 클래스패스에 추가된 바인딩에 따라 기본 로깅 백엔드가 결정된다. 예를 들어, Sun Java의 표준 로깅 패키지인 java.util.logging, log4j, reload4j, logback, tinylog 등을 사용할 수 있다. 쉽게 말해, Logback은 로깅 프레임워크라고 생각하면 된다.

 

Appender 종류

  • ConsoleAppender: 콘솔에 log를 출력한다.
  • FileAppender: 파일 단위로 log를 저장한다.
  • RollingFileAppender: 설정 옵션에 따라 log를 여러 파일로 나누어 저장한다.
  • SMTPAppender: log를 메일로 전송하여 기록한다.
  • DBAppender: log를 데이터베이스에 저장한다.

Logback 사용 이유

운영 환경에서 Log는 필수적이다. Logback 설정을 통해 운영 환경에서 효율적으로 Log를 관리할 수 있다. 뿐만 아니라, 데이터는 돈과 같으므로, Log는 중요한 자산이다. 이 자산을 잘 관리하기 위해서도 Logback을 사용하는 것이 중요하다.

 

실습

이번 실습에서는 Spring Boot 프로젝트에 Logback을 설정하고, 로그를 어떻게 관리할 수 있는지 살펴본다.

 

1. 프로젝트 생성

먼저, Spring Boot 프로젝트를 생성한다. 

 

Logback 설정을 위한 logback-spring.xml 파일을 생성하고, 아래와 같이 설정한다.

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="logback-spring-${spring.profiles.active}.xml"/>
</configuration>
  • 이 설정은 기본적인 Logback 설정을 불러오고, 활성화된 Spring 프로파일에 따라 추가적인 설정 파일을 불러오도록 한다.

2. 로컬 환경 설정

로컬 환경에서의 로그 설정을 위해 logback-spring-local.xml 파일을 생성하고, 다음과 같이 작성한다.

<included>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

    <root level="DEBUG">
        <appender-ref ref="CONSOLE"/>
    </root>
</included>
  • 이 설정은 콘솔에 로그를 출력하도록 하며, 로그 레벨을 DEBUG로 설정하여 보다 상세한 로그를 볼 수 있게 한다.

3. 로그 출력 확인

프로젝트를 실행하고, 활성화된 프로파일을 local로 설정하여 서버를 시작한다. 이를 통해 더 많은 로그가 출력되는데, 이는 로그 레벨이 기본적으로 INFO로 설정되어 있다가, DEBUG로 변경되었기 때문이다.

 

4. 커스텀 Appender 개발

기본 설정에 추가하여, 새로운 콘솔 Appender를 만들어본다. 이를 위해 logback-spring-local.xml 파일을 수정한다.

<included>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

    <appender name="CONSOLE2" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <layout>
            <pattern>
                [CONSOLE2] [%-5level] %d{yyyy-MM-dd HH:mm:ss} [%thread] [%logger{0}:%line] - %msg%n
            </pattern>
        </layout>
    </appender>

    <root level="DEBUG">
<!--        <appender-ref ref="CONSOLE"/>-->
        <appender-ref ref="CONSOLE2"/>
    </root>
</included>

  • 이 설정은 새롭게 CONSOLE2라는 이름의 Appender를 정의하고, 로그 레벨 INFO 이상만 출력되도록 설정한다. 그리고 이 Appender를 루트 로그에 연결하여 실행 시 로그를 출력하도록 한다.

5. 컨트롤러 생성 및 로그 테스트

다음으로, 간단한 컨트롤러를 생성하여 로그가 어떻게 출력되는지 확인한다.

package dev.be.logback.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
public class DemoController {
    @GetMapping("/demo")
    public String demo() {
        log.trace("log -> TRACE");
        log.debug("log -> DEBUG");
        log.info("log -> INFO");
        log.warn("log -> WARN");
        log.error("log -> ERROR");
        return "demo";
    }
}

 

이제 서버를 실행한 후 /demo 엔드포인트로 요청을 보내면, 다양한 로그 레벨에 따라 로그가 출력되는 것을 확인할 수 있다.

 

6. 결과 확인

로그를 INFO 레벨로 설정했기 때문에, INFO 이상의 로그만 출력된다. 

 

이렇게 기본적인 로컬 환경에서의 Logback 설정을 통해 로그를 관리하고 확인하는 방법을 실습해보았다.