본문 바로가기
기초 및 언어/▶ Spring

19. Spring_SLF4J Logger

by 류딩이 2025. 12. 3.

Spring에서 SLF4J Logger 사용법과 logback.xml 설정 정리

Spring Boot는 기본적으로 SLF4J + Logback 조합을 사용합니다. Logger 사용법, 메시지 포맷, logback.xml 설정, 그리고 실제 로그 출력 테스트 컨트롤러까지 모두 정리해둔 문서입니다.


1. SLF4J Logger 객체 생성

Logger는 보통 클래스마다 static final 로 하나만 생성해 사용합니다.


// Logger 생성
private static final Logger LOG = LoggerFactory.getLogger(MyController.class);
  • 각 클래스별 Logger 개별 생성
  • static final 선언으로 성능 최적화

2. SLF4J 메시지 포맷

SLF4J는 {} 형태의 플레이스홀더를 지원합니다.


LOG.debug("{}", request.getRequestURI());
  • 문자열 연결 없이 안전하게 값 바인딩
  • 불필요한 String 연산 방지

3. logback.xml 기본 설정

아래는 콘솔 로그 + 파일 로그(Rolling) + 패턴 설정 + 패키지별 로그 레벨을 포함한 구성입니다.


<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">

    <!-- 로그 패턴 (콘솔) -->
    <property name="CONSOLE_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%highlight(%-5level)] [%thread] %cyan(%logger{36}) - %msg%n"/>

    <!-- 로그 패턴 (파일) -->
    <property name="FILE_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n"/>

    <!-- 콘솔 로그 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 파일 로그 (Rolling) -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/app.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 패키지 로그 레벨 설정 -->
    <logger name="com.example" level="DEBUG"/>

    <!-- 루트 로그 레벨 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>

</configuration>

4. 로그 출력 테스트용 Controller

아래 예제는 여러 로그 레벨(trace, debug, info, warn, error)을 모두 출력해보는 테스트 컨트롤러입니다.


package com.example.Ex02.controller;

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

@RestController
@Slf4j
public class TestController {

    @GetMapping("/log-test")
    public String test() {
        try {
            String str = null;
            str.toString(); // 의도적으로 NullPointerException 발생
        } catch (Exception e) {
            log.trace("trace 로그");
            log.debug("debug 로그");
            log.info("info 로그");
            log.warn("warn 로그");
            log.error("error 로그", e);
        }
        return "log test ok";
    }
}
  • @Slf4j 사용으로 Logger 자동 생성
  • e 를 함께 넘기면 스택 트레이스까지 기록
  • 로그 레벨 차이를 한 번에 확인 가능

5. 정리

  • SLF4J Logger는 Spring Boot의 표준 로깅 방식
  • logback.xml 로 패턴, 출력 위치, 레벨 등 전체 제어 가능
  • 테스트 컨트롤러로 레벨별 로그가 정상 출력되는지 확인 가능

프로젝트 규모가 커질수록 로그 관리가 중요해지므로, SLF4J + Logback 조합을 적극 활용하는 것을 추천합니다.