공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.
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 설정을 통해 로그를 관리하고 확인하는 방법을 실습해보았다.
'BackEnd > Project' 카테고리의 다른 글
[RealPJ] Ch02. Log를 관리하기 위한 Logback 설정(3) (0) | 2024.08.31 |
---|---|
[RealPJ] Ch02. Log를 관리하기 위한 Logback 설정(2) (1) | 2024.08.31 |
[RealPJ] Ch02. 실무 스타일로 Feign Client 사용해보기 - ErrorDecoder (0) | 2024.08.31 |
[RealPJ] Ch02. 실무 스타일로 Feign Client 사용해보기 - Logger (3) | 2024.08.30 |
[RealPJ] Ch02. 실무 스타일로 Feign Client 사용해보기 - Interceptor (0) | 2024.08.30 |