[java] SLF4J에서 비동기 로깅 압축하기

비동기 로깅은 애플리케이션 성능 향상을 위해 많이 사용되는 기술 중 하나입니다. 대부분의 로깅 라이브러리는 비동기 로깅을 지원하고 있으며, SLF4J 역시 이를 지원하고 있습니다. 이번에는 SLF4J를 사용하여 비동기 로깅을 구현하고, 추가로 로그를 압축하는 방법에 대해 알아보겠습니다.

1. Maven 의존성 추가

먼저, Maven 프로젝트의 pom.xml 파일에 다음 의존성을 추가해주세요.

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

위 의존성은 SLF4J의 기본 로깅 구현체인 Logback을 사용하기 위한 것입니다.

2. Logback 설정

이제 Logback의 설정 파일인 logback.xml을 생성하고 다음과 같이 작성해주세요.

<configuration>
    <!-- Appenders -->
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="FILE"/>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/application.log</file>
        <encoder>
            <pattern>%-5level %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Root Logger -->
    <root level="info">
        <appender-ref ref="ASYNC"/>
    </root>
</configuration>

위 설정 파일에서는 ASYNC라는 이름의 AsyncAppender를 정의하고, FILE라는 이름의 FileAppender를 이어 붙였습니다. ASYNC appender를 통해 비동기로 로그를 기록하며, FILE appender는 로그를 파일에 저장합니다.

위 설정에서는 로그 파일의 경로를 logs/application.log로 설정했지만, 원하는 경로로 바꿔주세요.

3. 압축 설정 추가

logback.xml 파일에 다음 내용을 추가하여 로그를 압축할 수 있도록 설정해주세요.

<appender name="COMPRESSED" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/application.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>logs/application-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
    </rollingPolicy>
    <encoder>
        <pattern>%-5level %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

위 설정에서는 COMPRESSED라는 이름의 RollingFileAppender를 정의하고, 로그 파일의 이름 패턴을 logs/application-%d{yyyy-MM-dd}.log.gz로 설정했습니다. 이렇게 설정하면 매일 새로운 로그 파일이 생성되며, 이전 로그 파일은 gzip 형식으로 압축됩니다.

4. 로깅 사용하기

이제 SLF4J를 사용하여 로깅을 할 수 있습니다. 예를 들어, 다음과 같은 코드를 작성해보겠습니다.

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

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

    public static void main(String[] args) {
        logger.info("Hello, World!");
    }
}

위 코드에서는 LoggerFactory.getLogger() 메서드를 사용하여 로거 객체를 생성하고, logger.info() 메서드를 사용하여 로그를 기록하고 있습니다.

5. 결과 확인

프로그램을 실행하고 로그를 확인해보면, logs/application.log 파일에 로그가 기록되고, 매일 새로운 로그 파일이 생성되고 이전 로그 파일은 압축되어 보관되는 것을 확인할 수 있습니다.

참고 자료

이제 SLF4J를 사용하여 비동기 로깅을 구현하고 로그를 압축하는 방법에 대해 알아보았습니다. 이를 통해 애플리케이션의 성능을 향상시키고 로그 관리를 효율적으로 할 수 있습니다.