본문 바로가기
BackEnd/Project

[RealPJ] Ch02. Log를 관리하기 위한 Logback 설정(2)

by 개발 Blog 2024. 8. 31.

공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.

 

이번 포스팅에서는 로컬 환경이 아닌 프로덕션 환경에서 사용할 수 있는 Logback 설정을 다룬다. 프로덕션 환경에서는 로그 관리가 매우 중요하므로, 이를 위해 RollingFileAppender를 설정하는 방법을 실습해 본다.

 

1. Logback 프로덕션 설정 파일 작성

먼저, 프로덕션 환경에서 사용할 logback-spring-prod.xml 파일을 작성한다. 이 파일은 로그를 파일로 저장하고, 파일 크기가 커질 경우 자동으로 분할하여 보관하는 RollingFileAppender를 설정한다.

<included>

    <appender name="REQUEST1" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/request1.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>logs/archive/request1.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <maxFileSize>1KB</maxFileSize> <!--로그 파일의 최대 크기 -->
            <maxHistory>30</maxHistory>  <!-- 로그 파일 최대 보관 주기 (단위 : 일) -->
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                [REQUEST1] [%-5level] %d{yyyy-MM-dd HH:mm:ss} [%thread] [%logger{0}:%line] - %msg%n
            </pattern>
        </encoder>
    </appender>

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

</included>

 

2. 프로파일 설정 및 서버 실행

이제 프로파일을 prod로 설정하고 서버를 실행시킨다. 이 설정에 따라 서버는 프로덕션 환경의 로그 설정을 적용하게 된다.

 

3. 로그 파일 생성 확인

서버 실행 후, 요청을 보내면 logs 디렉토리에 request1.log 파일이 생성되고, 로그가 쌓이면서 지정한 양식대로 archive 디렉토리에 파일이 분할 저장된다.

 

4. 하드코딩된 패턴을 변수로 관리하기

패턴을 하드코딩하게 되면 수정 시 여러 파일에서 변경이 필요하다.

이를 방지하기 위해 공통으로 관리할 logback-variables.properties 파일을 생성하고, 필요한 변수를 정의한다.

LOG_DIR=logs
LOG_PATTERN=[%-5level] %d{yyyy-MM-dd HH:mm:ss} [%thread] [%logger{0}:%line] - %msg%n

 

5. 변수 적용 및 두 번째 어팬더 추가

변수를 적용하여 두 번째 어팬더를 설정한다. 이를 통해 다양한 로그 파일을 효율적으로 관리할 수 있다.

 

수정된 logback-spring-prod.xml

<included>
<property resource="logback-variables.properties"/> <!-- logback-variables.properties 사용-->

    <appender name="REQUEST1" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIR}/request1.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIR}/archive/request1.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <maxFileSize>1KB</maxFileSize> <!--로그 파일의 최대 크기 -->
            <maxHistory>30</maxHistory>  <!-- 로그 파일 최대 보관 주기 (단위 : 일) -->
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                [REQUEST1] ${LOG_PATTERN}
            </pattern>
            <outputPatternAsHeader>true</outputPatternAsHeader>
        </encoder>
    </appender>

    <appender name="REQUEST2" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIR}/request2.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIR}/archive/request2.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <maxFileSize>10KB</maxFileSize> <!--로그 파일의 최대 크기 -->
            <maxHistory>30</maxHistory>  <!-- 로그 파일 최대 보관 주기 (단위 : 일) -->
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                [REQUEST2] ${LOG_PATTERN}
            </pattern>
            <outputPatternAsHeader>true</outputPatternAsHeader>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="REQUEST1"/>
        <appender-ref ref="REQUEST2"/>
    </root>

</included>

 

6. 로그 파일 확인

서버를 다시 실행하면, request1.log와 request2.log라는 두 개의 로그 파일이 생성된다.

request1.log는 1KB씩 파일을 분할하여 저장하며, request2.log는 10KB 크기로 데이터를 쌓는다.

 

이처럼, 프로덕션 환경에서 RollingFileAppender를 사용한 로그 관리를 실습해 봤다. 로컬과 프로덕션 환경에 따라 로그 설정을 분리하여 관리할 수 있으며, 이를 통해 더욱 효율적으로 로그를 관리할 수 있다.