[java] SLF4J를 사용한 로그 파일 분리

로그는 애플리케이션 개발 및 유지보수에 있어서 매우 중요합니다. 로그 파일은 애플리케이션의 상태 및 오류를 기록하고 추적할 수 있도록 도와줍니다. 이러한 로그 파일을 적절하게 분리하면 로그 관리와 분석을 더욱 효율적으로 할 수 있습니다.

SLF4J(Simple Logging Facade for Java)는 다양한 로깅 시스템에 대한 추상화 계층을 제공하는 Java 로깅 API입니다. SLF4J를 사용하면 코드의 변경 없이 로깅 시스템을 변경할 수 있으며, 로깅 시스템의 성능과 설정을 최적화할 수 있습니다.

이번 글에서는 SLF4J를 사용하여 로그 파일을 분리하는 방법에 대해 알아보겠습니다.

1. Maven 의존성 추가

SLF4J를 사용하려면 Maven 또는 Gradle과 같은 의존성 관리 도구를 사용하여 SLF4J 관련 라이브러리를 프로젝트에 추가해야 합니다. 아래와 같이 Maven 의존성을 추가합니다.

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.32</version>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.6</version>
</dependency>

2. logback.xml 설정 파일 생성

logback은 SLF4J의 구현체 중 하나로, 로그를 제어하는 기능을 제공합니다. 로그 파일 분리를 위해 logback 설정 파일(logback.xml)을 생성해야 합니다. 아래는 logback.xml의 예시입니다.

<configuration>
  <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
    
  <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/app.log</file>
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
    
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>logs/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <maxHistory>30</maxHistory>
    </rollingPolicy>
  </appender>
    
  <logger name="com.example" level="INFO"/>
    
  <root level="INFO">
    <appender-ref ref="consoleAppender"/>
    <appender-ref ref="fileAppender"/>
  </root>
</configuration>

위의 설정 파일에서는 consoleAppender와 fileAppender라는 두 개의 앱던더를 정의하고, com.example 패키지의 로그 레벨을 INFO로 설정합니다. fileAppender는 로그 파일을 일별로 분리하며, 최대 30일 동안의 로그 파일을 유지합니다.

3. 로그 사용하기

이제 SLF4J를 사용하여 로그를 기록할 수 있습니다. 아래는 예시 코드입니다.

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

public class MyClass {
  private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
  
  public void doSomething() {
    logger.info("Something happened.");
  }
}

위의 코드에서는 SLF4J LoggerFactory를 사용하여 Logger 객체를 생성하고, 생성한 Logger 객체를 사용하여 로그를 기록합니다.

4. 결과 확인

로그 파일은 설정 파일에서 지정한 경로(예: logs/app.log)에 생성됩니다. 로그 파일은 일별로 분리되며, 각 로그 파일은 날짜와 일련번호를 포함한 파일 이름으로 저장됩니다.

이제 SLF4J를 사용하여 로그 파일을 분리하는 방법에 대해 알게되었습니다. 로그 파일을 분리하면 로그 관리 작업이 더욱 편리해지고, 애플리케이션의 로그를 효과적으로 분석할 수 있습니다. SLF4J와 logback을 함께 사용하면 유연하고 효율적인 로그 관리를 구현할 수 있습니다.