로깅 레벨

moon.kick·2025년 4월 17일

좋아, 이번에는 Spring Framework나 Spring Boot에서 자주 사용하는 로깅 레벨의 의미
Logback 설정 방법(XML), JSON 형식 출력, 파일 저장 방식까지 실전에서 바로 쓸 수 있게
아주 자세히 정리해줄게!


✅ 1. 로깅 레벨 (TRACE, DEBUG, INFO, WARN, ERROR)

레벨용도 설명
TRACE가장 상세한 로그. 흐름 추적용 (디버깅 단계 전용)
DEBUG개발 시 확인할 상세 정보 (변수 값, 조건 분기 등)
INFO일반적인 서비스 운영 정보 (시작, 성공 메시지 등)
WARN경고. 오류는 아니지만 주의가 필요한 상태 (deprecated, 비정상 응답 등)
ERROR예외 발생이나 시스템 실패 상황

🔸 운영 서버: INFO 또는 WARN 이상
🔸 개발 환경: DEBUG 또는 TRACE 활성화 추천


✅ 2. Logback 설정 XML (logback.xml)

Spring Boot는 기본적으로 Logback을 사용하며,
src/main/resources/logback.xml 파일을 만들면 설정을 직접 제어할 수 있어.

📄 기본 로그 출력 설정 예시

<configuration>

  <!-- 콘솔 출력 -->
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <!-- 로그 파일 출력 -->
  <appender name="fileAppender" class="ch.qos.logback.core.FileAppender">
    <file>logs/app.log</file>
    <append>true</append>
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n</pattern>
    </encoder>
  </appender>

  <!-- root logger 설정 (최상위 로그레벨 정의) -->
  <root level="INFO">
    <appender-ref ref="console"/>
    <appender-ref ref="fileAppender"/>
  </root>

</configuration>

✅ 3. JSON 로그 출력 (Logstash용 등)

Logback은 logstash-logback-encoder 라이브러리를 사용하면 JSON 로그도 출력 가능해.

📦 Gradle 의존성

dependencies {
  implementation 'net.logstash.logback:logstash-logback-encoder:7.4'
}

📄 logback-spring.xml 예시 (JSON)

<configuration>
  <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

  <appender name="jsonConsole" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
      <providers>
        <timestamp>
          <fieldName>timestamp</fieldName>
        </timestamp>
        <loggerName />
        <threadName />
        <logLevel />
        <message />
        <stackTrace />
      </providers>
    </encoder>
  </appender>

  <root level="INFO">
    <appender-ref ref="jsonConsole"/>
  </root>
</configuration>

✅ 4. 로그 파일 저장 및 롤링 정책 설정

로그 파일이 커지면 자동으로 롤링해서 백업하거나, 날짜별로 파일을 분리할 수 있어.

📄 롤링 로그 파일 설정

<appender name="rollingFile" 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>7</maxHistory> <!-- 7일 보관 -->
  </rollingPolicy>

  <encoder>
    <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n</pattern>
  </encoder>
</appender>

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

✅ 5. application.properties에서 간단 설정 (Spring Boot)

# 전체 로그 레벨
logging.level.root=INFO

# 패키지별 로그 레벨 지정
logging.level.com.myapp.service=DEBUG

# 콘솔 출력 패턴
logging.pattern.console=%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

# 파일 저장 경로
logging.file.name=logs/application.log
logging.file.path=logs/

✅ 정리 요약

기능방법
콘솔 출력ConsoleAppender 사용
파일 저장FileAppender 또는 RollingFileAppender
JSON 로그 출력logstash-logback-encoder 사용
로그 레벨 조정logging.level.xxx 또는 root level="..."
로그 패턴 변경<pattern> 태그 수정 또는 logging.pattern.console

필요하면:

  • 로그를 로그 서버(ELK, Loki 등) 로 보내는 구조도 설명해줄 수 있고,
  • 비동기 로그 처리 (AsyncAppender)
  • 환경별 로그 설정 (dev/prod 분리)
    도 알려줄게.

어떤 방식이 더 궁금해? 😊

profile
@mgkick

0개의 댓글