[java] SLF4J에서 로그 메시지 압축하기

로그 메시지는 개발 중에 디버깅과 문제 해결에 매우 유용합니다. 그러나 로그 파일은 종종 크기가 너무 커서 디스크 공간을 많이 차지하게 됩니다. 이 문제를 해결하기 위해 SLF4J에서 로그 메시지를 압축하는 방법을 알아보겠습니다.

1. 로그 롤링 설정

SLF4J는 다양한 로그 롤링 정책을 지원합니다. 로그 롤링은 지정된 크기나 날짜에 따라 로그 파일을 분리하고 압축하는 메커니즘입니다. 여러 가지 롤링 정책 중에서는 크기나 시간기반 롤링, 그리고 gzip 압축 정책이 있습니다.

2. logback 설정 파일 작성

logback은 SLF4J의 구현체 중 하나로, 로그 압축을 적용하기 위한 많은 설정 옵션을 제공합니다. 설정 파일인 logback.xml을 작성하고 압축 정책을 설정해야 합니다.

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/path/to/log/file.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>/path/to/log/file.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
        </rollingPolicy>
    </appender>
    
    <root level="debug">
        <appender-ref ref="FILE"/>
    </root>
</configuration>

위의 설정 파일에서 주목해야 할 부분은 fileNamePattern 입니다. 이 부분에서 로그 파일명에 날짜와 .gz 확장자를 추가하여 압축된 로그 파일을 생성합니다.

3. Maven 종속성 추가

logback을 사용하기 위해 Maven 종속성을 추가해야 합니다. pom.xml 파일을 열고 다음 종속성을 추가하세요.

<dependencies>
    <!-- logback -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
</dependencies>

4. 로그 메시지 압축 테스트

이제 로그 파일이 일정 크기를 초과하면 압축되어 새로운 로그 파일이 생성됩니다. 이를 테스트하기 위해 간단한 코드를 작성해보겠습니다.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogCompressionTest {
    private static final Logger logger = LoggerFactory.getLogger(LogCompressionTest.class);

    public static void main(String[] args) {
        for (int i = 1; i <= 1000; i++) {
            logger.debug("This is a log message {}", i);
        }
    }
}

위의 코드를 실행하면 정의된 경로에 로그 파일이 생성되고, 일정 크기를 초과하면 새로운 로그 파일이 압축되어 생성됩니다.

참고 자료

SLF4J 공식 문서: https://www.slf4j.org/

위에서 설명한 설정은 logback을 사용한 예시입니다. logback에 대한 자세한 내용은 logback 공식 문서를 참고하세요.