본문 바로가기
프로젝트

로깅(Logging)과 Logback 정리

by jucheol 2025. 8. 9.

로깅(Logging)란?

애플리케이션이 동작하는 동안 시스템의 상태나 동작 정보를 시간순으로 기록하는 것을 말합니다.
주로 비기능 요구사항에 해당하며, 문제 추적, 성능 모니터링, 보안 분석 등 다양한 목적으로 사용됩니다.


Logback이란?

Logback은 자바 진영에서 가장 널리 쓰이는 로깅 프레임워크 중 하나입니다.
SLF4J(Simple Logging Facade for Java)를 기반으로 구현되었으며, 이전 세대인 Log4j보다 성능과 유연성이 뛰어납니다.

Logback의 특징

  • 5가지 로그 레벨 지원
    • ERROR : 심각한 오류로 인해 애플리케이션 동작이 불가능한 상태
    • WARN : 잠재적으로 문제를 일으킬 수 있는 경고 상황
    • INFO : 서비스의 주요 동작이나 상태 변경 기록
    • DEBUG : 개발·디버깅 과정에서 필요한 상세 정보
    • TRACE : DEBUG보다 더 세밀한 정보
  • 환경별 다른 로그 레벨 설정 가능
    (예: 개발 환경은 DEBUG, 운영 환경은 INFO)
  • 설정 파일 자동 감지
    일정 주기마다 설정 파일을 스캔하므로 재시작 없이 변경 적용 가능
  • 로그 파일 압축 및 보관 주기 설정 가능
  • maxHistory로 보관 기간 관리 가능
    간단한 주기 삭제는 maxHistory 속성으로 충분하며,
    복잡한 백업·압축·외부 전송 후 삭제 같은 특수 상황은 스프링 스케줄러나 배치 작업으로 처리

Logback 설정 방법

Logback은 클래스패스(classpath)에 있는 설정 파일을 자동으로 읽어옵니다.

  • 일반 자바·스프링 프로젝트 → logback.xml
  • 스프링 부트 → logback-spring.xml (환경별 설정 프로필 지원)

의존성 설정

implementation 'org.springframework.boot:spring-boot-starter-logging'

설정 파일의 주요 구성 영역

1. Property 영역

  • 경로나 패턴 등 재사용할 값을 정의

2. Appender 영역 (중요)

  • 로그 출력 방식과 저장 위치를 정의
  • Appender는 인터페이스이며, 대표 구현체:
    • ConsoleAppender : 콘솔에 출력
    • FileAppender : 지정한 파일에 저장
    • RollingFileAppender : 여러 파일을 순환하며 저장 (파일 용량·날짜 기준 롤링 가능)
    • SMTPAppender : 이메일로 로그 전송
    • DBAppender : 데이터베이스에 로그 저장

3. Encoder 영역

  • 로그의 출력 형식을 정의
  • 패턴 예시:
패턴 의미 패턴 의미
%d{yyyy-MM-dd HH:mm:ss.SSS} 로그 시간 %thread 현재 쓰레드명
%-5level 로그 레벨 %logger{36} 로거 이름(길이 제한 가능)
%msg 로그 메시지 %n 줄바꿈
%C 클래스명 %L 호출 라인 수
%M 메서드명 %r 애플리케이션 실행 후 경과 시간(ms)
 

4. Root 영역(중요)

  • 전역 기본 로깅 설정
  • 모든 패키지/클래스에 적용 (별도의 logger 설정이 없을 때 기본값으로 사용)
  • 예:→ 아무 로거 이름도 지정하지 않은 경우, INFO 이상만 출력
<root level="INFO">
    <appender-ref ref="CONSOLE"/>
</root>

5. Logger 영역

  • 특정 패키지·클래스에만 적용되는 로깅 설정
  • Root 영역보다 우선순위가 높음
  • additivity="false"로 하면 해당 로거의 로그가 Root로 전파되지 않음
  • 예:→ com.example.api 패키지는 DEBUG까지 출력, 그 외는 Root 설정(INFO) 사용
<logger name="com.example.api" level="DEBUG" additivity="false">
    <appender-ref ref="CONSOLE"/>
</logger>

logback-spring.xml 예제

아래 예제는 개발 환경에서는 DEBUG 레벨까지 콘솔에 출력하고,
운영 환경에서는 INFO 이상 로그만 파일로 저장하며 30일 보관 후 자동 삭제하는 설정입니다.

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

    <!-- 1. 공통 경로 및 패턴 설정 -->
    <property name="LOG_PATH" value="./logs"/>
    <property name="LOG_FILE_NAME" value="app-log"/>
    <property name="LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>

    <!-- 2. 콘솔 출력 Appender -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 3. RollingFileAppender (일자별 로그 파일 분리 + 30일 보관) -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${LOG_FILE_NAME}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 파일명 형식: app-log.2025-08-09.log -->
            <fileNamePattern>${LOG_PATH}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory> <!-- 30일 보관 -->
        </rollingPolicy>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 4. 환경별 로그 설정 -->
    <!-- 개발 환경 -->
    <springProfile name="dev">
        <root level="DEBUG">
            <appender-ref ref="CONSOLE"/>
        </root>
    </springProfile>

    <!-- 운영 환경 -->
    <springProfile name="prod">
        <root level="INFO">
            <appender-ref ref="FILE"/>
        </root>
    </springProfile>

</configuration>

예제 설명

  1. Property
    • ${LOG_PATH}, ${LOG_FILE_NAME}, ${LOG_PATTERN}으로 재사용 가능한 값을 지정
    • 경로나 패턴이 여러 곳에서 반복될 때 유지보수가 쉬움
  2. ConsoleAppender
    • 개발 환경에서만 사용 (운영 환경에서는 콘솔 로그 최소화)
  3. RollingFileAppender
    • 날짜별 로그 파일 생성 (%d{yyyy-MM-dd})
    • 30일치만 보관 (<maxHistory>30</maxHistory>)
  4. springProfile
    • spring.profiles.active 값에 따라 로깅 전략 변경 가능
    • 예: application-dev.yml → DEBUG, application-prod.yml → INFO