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 조합을 적극 활용하는 것을 추천합니다.
'기초 및 언어 > ▶ Spring' 카테고리의 다른 글
| 20. Spring_Swagger (0) | 2025.12.03 |
|---|---|
| 18. Spring_외부데이터 출력(.csv/json/) (0) | 2025.10.16 |
| 17. Spring_BookSite만들기-1 (1) | 2025.10.14 |
| 16. Spring_Thymeleaf 헤더(Fragment)로 로그인 상태 표시하기 (0) | 2025.10.10 |
| 15. Spring Boot JPA + 쿼리 어노테이션(jpql) (0) | 2025.10.01 |