ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring - logback 패키지별 분리하여 설정하기
    Spring 2025. 1. 8. 14:55
    반응형

    파일 분리 및 패키지별 로그 관리

    (1) 패키지별 로그 파일 관리

    예를 들어, a 패키지와 b 패키지에서 발생하는 로그를 각각 a.log와 b.log에 기록하고, MyBatis 쿼리 로그를 별도로 관리하려면 다음과 같이 설정합니다.

     

    <configuration debug="true">
        <!-- 로그 파일 경로 변수 설정 -->
        <property name="LOG_PATH" value="D:/workspace/example/logs" />   
    
        <!-- 콘솔 출력 -->
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!-- a 패키지 로그 -->
        <appender name="A_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_PATH}/a.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_PATH}/a-%d{yyyy-MM-dd}.log</fileNamePattern>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!-- b 패키지 로그 -->
        <appender name="B_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_PATH}/b.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_PATH}/b-%d{yyyy-MM-dd}.log</fileNamePattern>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!-- MyBatis 쿼리 로그 -->
        <appender name="MYBATIS_QUERY" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_PATH}/mybatis.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_PATH}/mybatis-sql-%d{yyyy-MM-dd}.log</fileNamePattern>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!-- a 패키지에 대한 로거 -->
        <logger name="a" level="INFO" additivity="false">
            <appender-ref ref="A_FILE" />
        </logger>
    
        <!-- b 패키지에 대한 로거 -->
        <logger name="b" level="INFO" additivity="false">
            <appender-ref ref="B_FILE" />
        </logger>
    
        <!-- MyBatis 쿼리 로거 -->
        <logger name="a.service.mapper" level="DEBUG" additivity="false">
            <appender-ref ref="MYBATIS_QUERY" />
        </logger>
    
        <logger name="b.service.mapper" level="DEBUG" additivity="false">
            <appender-ref ref="MYBATIS_QUERY" />
        </logger>
    
        <!-- 기본 로그 설정 -->
        <root level="INFO">
            <appender-ref ref="CONSOLE" />
        </root>
    </configuration>

     

     


    1. RollingFileAppender

    RollingFileAppender는 Logback의 핵심 Appender 중 하나로, 로그 파일을 일정 조건(시간, 크기 등)에 따라 순환(rolling)하면서 관리하는 역할을 합니다. 이 방식은 오래된 로그를 보존하면서도 최신 로그를 저장하기 위해 사용됩니다.

    주요 속성

    • file: 로그를 저장할 기본 파일 경로.
    • rollingPolicy: 로그 파일의 순환 조건(시간 기준, 크기 기준 등)을 설정.
    • encoder: 로그 메시지를 포맷팅(형식화)하는 설정.

    예제

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

    2. rollingPolicy

    rollingPolicy는 RollingFileAppender의 하위 설정으로, 로그 파일의 순환 조건을 정의합니다. Logback에서 자주 사용되는 rollingPolicy는 두 가지입니다:

    (1) TimeBasedRollingPolicy

    • 시간 기준으로 파일을 교체(roll)합니다.
    • 로그 파일 이름에 날짜를 포함하여 파일이 순환되도록 설정합니다.

    주요 속성

    • fileNamePattern: 순환되는 로그 파일의 이름 형식을 정의.
    • maxHistory: 보관할 로그 파일의 최대 개수.

    예제

     
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/a-%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>

     

    • fileNamePattern: 로그 파일 이름에 날짜(예: a-2025-01-08.log)를 포함.
    • maxHistory: 30일 동안의 로그 파일만 유지. 이후 오래된 파일은 삭제.

    (2) SizeBasedTriggeringPolicy

    • 크기 기준으로 파일을 교체(roll)합니다.
    • 파일 크기가 설정된 maxFileSize를 초과하면 새로운 로그 파일을 생성합니다.

    예제

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>10MB</maxFileSize>
    </triggeringPolicy>

     


    3. fileNamePattern

    fileNamePattern은 rollingPolicy에서 순환 로그 파일의 이름 형식을 정의합니다. 일반적으로 시간 또는 크기 기준으로 파일 이름을 구성합니다.

    예제

    <fileNamePattern>${LOG_PATH}/a-%d{yyyy-MM-dd}.log</fileNamePattern>

    주요 패턴

    • ${LOG_PATH}: 로그 파일이 저장될 디렉토리(변수).
    • a-%d{yyyy-MM-dd}: 날짜 기반의 파일 이름.
      • %d{yyyy-MM-dd}는 로그 파일 이름에 날짜를 추가(예: a-2025-01-08.log).

    4. maxHistory

    • maxHistory는 보관할 로그 파일의 최대 개수를 설정합니다.
    • TimeBasedRollingPolicy에서 사용됩니다.
    • 예를 들어, maxHistory가 30으로 설정된 경우, 가장 오래된 30일 동안의 로그 파일만 보관됩니다.

    예제

    <maxHistory>30</maxHistory>

    5. encoder

    encoder는 로그 메시지를 **포맷팅(형식화)**합니다. 로그가 기록되는 형식을 정의하며, 패턴 문자열을 통해 다양한 정보를 포함할 수 있습니다.

    예제

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

    패턴 설명

    1. %d{yyyy-MM-dd HH:mm:ss}
      • 로그 발생 시간.
      • 형식은 SimpleDateFormat과 동일합니다(예: 2025-01-08 14:23:45).
    2. [%thread]
      • 로그를 발생시킨 스레드 이름(예: [main]).
    3. %-5level
      • 로그의 레벨(INFO, DEBUG, ERROR 등).
      • %-5는 레벨 이름을 왼쪽 정렬로 출력하고, 5자리를 확보합니다(예: INFO , ERROR).
    4. %logger{36}
      • 로그를 출력한 로거 이름.
      • {36}은 최대 길이를 제한(36자). 긴 로거 이름은 잘립니다.
    5. %msg
      • 로그 메시지 내용.
    6. %n
      • 줄바꿈 문자. 로그 메시지 끝에 줄바꿈을 추가합니다.

    주요 정리

    • RollingFileAppender: 로그 파일을 순환 관리.
    • TimeBasedRollingPolicy: 시간에 따라 파일 순환.
    • fileNamePattern: 파일 이름 형식(예: 날짜 포함).
    • maxHistory: 보관할 로그 파일 개수 제한.
    • encoder: 로그 메시지의 포맷 정의.
    • pattern 변수: %d, %thread, %level, %msg 등을 활용.

    이 설정은 프로젝트에 필요한 유연한 로그 관리 및 유지 보수를 가능하게 합니다.

    반응형

    댓글

Designed by Tistory.