Spring Boot에서 SLF4J와 Logback으로 로깅 설정하기

애플리케이션의 상태를 추적하고 문제를 진단하기 위해 로깅(logging)은 필수입니다. Spring Boot에서는 기본적으로 SLF4J + Logback 조합이 기본 설정으로 제공되며, 개발과 운영 환경 모두에서 널리 사용됩니다.

 


1. SLF4J란?

SLF4J(Simple Logging Facade for Java)는 다양한 로깅 프레임워크에 대한 통합 인터페이스(Facade)입니다.

  • Log4j, Logback, java.util.logging 등과 쉽게 연동 가능
  • 코드 레벨에서는 SLF4J API만 사용하면 로깅 구현체는 유연하게 교체 가능

즉, SLF4J는 로깅 API 표준을 제공하고, Logback은 실제 로깅을 수행하는 구현체입니다.


private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.info("정보 로그 출력");
logger.error("에러 발생", e);

 

 


2. Logback이란?

Logback은 SLF4J의 공식 구현체로, Spring Boot에서 기본으로 사용됩니다. 다음과 같은 특징이 있습니다.

  • 성능이 우수하고, 비동기 로그 처리 지원
  • XML 기반의 유연한 설정 방식
  • 로그 레벨별 출력, 파일 분리, 압축 및 보관 기능 지원

기본 설정 없이도 Spring Boot는 Logback을 자동 구성하지만, 직접 설정이 필요할 경우 logback-spring.xml을 사용합니다.

 


3. 기본 로그 설정

Spring Boot에서 별도 설정이 없을 경우 다음 기본 설정이 적용됩니다.

  • 콘솔(console)에 INFO 레벨 이상 로그 출력
  • 로깅 포맷: yyyy-MM-dd HH:mm:ss.level.loggerName - message

로그 레벨은 application.properties 또는 application.yml에서 설정할 수 있습니다.


# application.properties 예시
logging.level.root=INFO
logging.level.com.myapp=DEBUG

# application.yml 예시
logging:
  level:
    root: INFO
    com.myapp: DEBUG

 

 


4. logback-spring.xml 커스터마이징

logback-spring.xml 파일을 src/main/resources에 추가하면 로깅을 세밀하게 설정할 수 있습니다.

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

  <property name="LOG_PATH" value="logs"/>

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/app.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOG_PATH}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
      <maxHistory>14</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <root level="INFO">
    <appender-ref ref="FILE"/>
  </root>

</configuration>
  • RollingFileAppender: 날짜별 로그 분리
  • maxHistory: 로그 보관 일수

필요 시 콘솔과 파일을 동시에 출력할 수도 있습니다. (appender 두 개 등록)

 


5. 로깅 레벨 정리

레벨 설명 사용 예
TRACE 가장 상세한 디버깅 정보 루프 내부 변수 추적
DEBUG 디버깅에 유용한 정보 서비스 흐름, 파라미터 로그
INFO 정상 흐름의 상태 정보 API 호출 성공, 처리 결과
WARN 잠재적 문제, 경고 deprecated 사용, 예외 fallback
ERROR 실패한 처리 또는 예외 try-catch 예외 처리

운영환경에서는 INFO 또는 WARN 이상만 출력하고, 개발환경에서는 DEBUG 레벨을 적극 사용하는 것을 권장합니다.

 


6. 실무에서의 로깅 전략

  • 중요한 흐름: INFO 로그로 추적 가능하도록
  • 민감한 정보(ex. 비밀번호, 카드번호)는 절대 로그에 남기지 않기
  • 운영 서버에서는 외부 로깅 시스템과 연동 (예: ELK, CloudWatch, Datadog)
  • 로깅에는 PlaceHolder 방식 사용 권장 (logger.debug("userId: {}", id))

 


결론

Spring Boot에서는 SLF4J + Logback 기반의 로깅 설정이 매우 강력하면서도 유연합니다. 간단한 설정만으로 콘솔, 파일, 외부 연동까지 다양한 로깅 전략을 구사할 수 있으며, 환경별 프로파일 설정과 연계해 개발/운영 구분도 쉽게 구현할 수 있습니다.

정확하고 효율적인 로그는 개발자에게 강력한 무기입니다. 실제 운영에서 발생하는 장애나 이슈의 근본 원인을 빠르게 파악하려면, 설계 단계에서부터 로깅 전략을 고민 하는 것이 중요합니다.