자바 로깅 라이브러리(Logback)

1. 개요 (Overview)

2. 주요 특장점 (Key Features)

3. 로그 레벨 운영 체계 (Log Level Specification)

Logback은 총 5단계의 로깅 레벨을 정의하며, 하위 레벨 설정 시 상위 레벨의 로그가 포함되어 출력되는 계층적 구조를 가짐.

(최하위) TRACE → DEBUG → INFO → WARN → ERROR (최상위)

4. 아키텍처 핵심 구성 요소 (Core Components)

구성 요소 주요 기능 및 역할
Logger 로그 컨텍스트를 관리하며, 패키지별 로그 레벨 필터링 및 수집 주체 역할을 수행함.
Appender 수집된 로그를 최종적으로 출력할 대상 위치(매체)를 결정함.
Encoder 로그 이벤트를 바이트 배열로 변환하고, 지정된 포맷(Format)으로 문자열을 포매팅함.

※ 주요 Appender 분류

  1. ConsoleAppender: 표준 출력(System.out)을 통해 터미널 및 콘솔 화면에 로그를 표출함.
  2. FileAppender: 지정한 단일 파일 경로에 로그 데이터를 지속 기록함.
  3. RollingFileAppender: 운영 환경 필수 요소로, 설정된 조건(일 단위, 용량 단위 등)에 따라 로그 파일을 분할 보관(Rolling)함.

5. 표준 설정 파일 구조 예시 (logback.xml)

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

    <property name="LOG_PATH" value="./logs" />
    <property name="LOG_FILE_NAME" value="application" />

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

    <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${LOG_FILE_NAME}.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/archive/${LOG_FILE_NAME}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>30</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>

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

    <logger name="com.yourpackage" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="ROLLING_FILE" />
    </logger>

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="ROLLING_FILE" />
    </root>

</configuration>

ref

What Else?
inflearn react api server buy me a coffee