Spring Boot · 2026-02-10

Spring Boot 로그 레벨 동적 변경과 프로파일별 로깅 설정

Spring Boot에서 Logback을 이용해 프로파일별 로깅 설정을 관리하고, 운영 중 로그 레벨을 동적으로 변경하는 방법과 예제 코드 및 주의사항 설명

작성일 : 2026-02-10 ㆍ 작성자 : 관리자
post
목차

개요

애플리케이션을 운영하다 보면 개발·테스트·운영 환경별로 다른 로그 설정이 필요하다. 또한 장애나 성능 문제 발생 시 재배포 없이 로그 레벨을 올려 자세한 로그를 수집해야 한다. 이 글은 Spring Boot에서 프로파일별 Logback 설정과 런타임에 로그 레벨을 동적으로 변경하는 실무적 접근을 정리한다.

왜 프로파일별 로깅과 동적 변경이 필요한가

프로파일별로 로그 포맷, 출력 대상, 레벨을 분리하면 개발 중 디버그용 로그를 활성화하고 운영에서는 정보 또는 경고 수준으로 로그를 줄여 성능과 저장 비용을 관리할 수 있다. 한편 장애 대응 시에는 애플리케이션을 중단하지 않고 특정 패키지의 로그 레벨을 높여 원인 분석에 필요한 상세 정보를 확보할 수 있다.

기본 구성 요소

Logback

Spring Boot 기본 로깅 구현체로 Logback을 사용하면 logback-spring.xml을 통해 프로파일 기반 설정이 가능하다.

Actuator

Spring Boot Actuator의 /actuator/loggers 엔드포인트는 런타임에 로그 레벨을 조회·변경할 수 있는 표준 방법을 제공한다. 보안에 주의해 관리해야 한다.

프로파일별 Logback 설정 예시

다음 예시는 개발(dev)과 운영(prod)에서 서로 다른 콘솔과 파일 패턴을 적용하는 방법이다.

<configuration>

  <springProfile name="dev">
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
      <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
      </encoder>
    </appender>

    <root level="DEBUG">
      <appender-ref ref="CONSOLE" />
    </root>
  </springProfile>

  <springProfile name="prod">
    <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.gz</fileNamePattern>
        <maxHistory>30</maxHistory>
      </rollingPolicy>
      <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
      </encoder>
    </appender>

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

</configuration>

application.yml로 프로파일 관리

application.yml에서 프로파일별로 로깅 레벨을 기본값처럼 정의할 수 있다. 하지만 복잡한 포맷이나 appender는 logback-spring.xml에서 제어하는 것이 더 유연하다.

spring:
  profiles: dev

logging:
  level:
    root: INFO
    com.example: DEBUG

위 설정은 프로파일 별로 기본 레벨을 지정하는 간단한 방법이다. 더 정교한 제어가 필요하면 logback-spring.xml을 사용한다.

런타임 로그 레벨 변경 방법

1) Actuator 사용

Actuator를 의존성에 추가하고 엔드포인트를 활성화하면 /actuator/loggers에서 레벨 변경이 가능하다. 보안이 중요한 환경에서는 인증·인가 설정을 반드시 적용한다.

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

엔드포인트 활성화 예시 (application.yml):

management:
  endpoints:
    web:
      exposure:
        include: "health,info,loggers"
  endpoint:
    loggers:
      enabled: true

로그 레벨 변경 예시 (curl):

curl -X POST -u user:pass -H "Content-Type: application/json" \
  -d '{"configuredLevel":"DEBUG"}' \
  http://localhost:8080/actuator/loggers/com.example.package

2) 코드로 변경

프로그램에서 직접 변경할 때는 Spring Boot의 LoggingSystem을 사용한다. 이 방법은 애플리케이션 내부에서 조건부로 로그 레벨을 바꿀 때 유용하다.

import org.springframework.boot.logging.LoggingSystem;
import org.springframework.stereotype.Service;

@Service
public class LogLevelService {

  private final LoggingSystem loggingSystem;

  public LogLevelService(LoggingSystem loggingSystem) {
    this.loggingSystem = loggingSystem;
  }

  public void setLevel(String loggerName, String level) {
    loggingSystem.setLogLevel(loggerName, org.springframework.boot.logging.LogLevel.valueOf(level));
  }
}

운영 시 고려사항

  • Actuator 엔드포인트는 인증·인가 후 노출한다.
  • 로그 레벨을 과도하게 DEBUG로 올리면 디스크·CPU에 영향을 줄 수 있다.
  • 프로파일별 설정은 일관된 로그 포맷을 유지해 로그 분석과 연동이 쉬운 형태로 설계한다.
  • 분산 환경에서는 중앙 로깅(ELK, Grafana Loki 등)과 연계해 로그 레벨 변경 시 수집 정책도 함께 고려한다.

체크리스트

  • logback-spring.xml을 프로파일별로 구성했는가
  • Actuator의 loggers 엔드포인트가 안전하게 노출되는가
  • 운영 환경에서의 로그 보존 정책과 디스크 사용량을 검토했는가
  • 동적 변경 후에도 필요한 로그가 정상적으로 수집되는가

마무리

프로파일별 로깅 설정과 런타임 로그 레벨 변경은 안정적인 운영과 빠른 문제 해결에 큰 도움이 된다. 단순한 application.yml 설정으로 충분한 경우도 있지만, 서비스 규모가 커질수록 logback-spring.xml과 Actuator, 중앙 로깅 시스템을 함께 설계하는 것이 바람직하다. 각 환경의 요구에 맞춰 적절히 조합해 사용하면 로그 관리의 효율성을 높일 수 있다.

spring boot 로그 레벨 변경 logback spring boot 프로파일별 스프링부트 로깅 설정 actuator loggers logback-spring.xml 동적 로그 레벨 로깅 정책 중앙 로깅 연동