[java] SLF4J와 Log4j의 추가 로그 파일 분리

SLF4J (Simple Logging Facade for Java)와 Log4j는 자바 애플리케이션에서 로깅을 위해 일반적으로 사용되는 라이브러리입니다. SLF4J는 로깅 API를 추상화하고, Log4j는 그 구현체 중 하나입니다. 로깅을 통해 애플리케이션의 동작과 상태를 추적하고, 디버깅 및 모니터링에 도움을 줄 수 있습니다.

하나의 로그 파일로 모든 로깅 정보를 관리하는 방법이 일반적이지만, 때로는 로그 파일을 분리하여 특정 모듈 또는 기능의 로그를 따로 관리하는 것이 유용할 수 있습니다. 이번 가이드에서는 SLF4J와 Log4j를 사용하여 추가적인 로그 파일을 분리하는 방법을 알아보겠습니다.

1. Log4j.properties 파일 수정

먼저, 로그 파일을 분리하기 위해 Log4j.properties 파일을 수정해야 합니다. 이 파일은 주로 애플리케이션의 클래스 패스에 위치하며, Log4j의 설정을 정의합니다.

log4j.rootLogger=INFO, mainLogger, additionalLogger

log4j.appender.mainLogger=org.apache.log4j.RollingFileAppender
log4j.appender.mainLogger.File=/path/to/main.log
log4j.appender.mainLogger.MaxFileSize=10MB
log4j.appender.mainLogger.MaxBackupIndex=10
log4j.appender.mainLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.mainLogger.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c{1}] %m%n

log4j.appender.additionalLogger=org.apache.log4j.DailyRollingFileAppender
log4j.appender.additionalLogger.File=/path/to/additional.log
log4j.appender.additionalLogger.DatePattern='.'yyyy-MM-dd
log4j.appender.additionalLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.additionalLogger.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c{1}] %m%n

위의 예시에서는 mainLoggeradditionalLogger 두 개의 로그 파일을 정의하고 있습니다. mainLogger는 매번 로그 크기를 체크하여 파일을 롤링하는 RollingFileAppender를 사용하고, additionalLogger는 매일 새로운 로그 파일을 생성하는 DailyRollingFileAppender를 사용합니다. 각 로그 파일의 경로는 사용자가 설정한 경로로 수정해야 합니다.

2. SLF4J 로깅 코드 수정

로그 파일을 분리하기 위해 SLF4J 로깅 코드를 수정해야 합니다. SLF4J는 간단한 로깅 API이므로, 로깅 코드를 변경하는 것은 매우 간단합니다. 아래 예시 코드에서는 두 개의 로그 파일에 다른 로그 레벨로 메시지를 로깅하는 방법을 보여줍니다.

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

public class ExampleClass {
    private static final Logger mainLogger = LoggerFactory.getLogger("mainLogger");
    private static final Logger additionalLogger = LoggerFactory.getLogger("additionalLogger");

    public void doSomething() {
        mainLogger.info("This log will be written to main.log");
        additionalLogger.error("This log will be written to additional.log");
    }
}

위의 예시 코드에서는 LoggerFactory.getLogger() 메소드를 사용하여 로그 파일을 지정하고, 각 로그 레벨에 따라 메시지를 로깅합니다.

3. 코드 실행 및 로그 확인

모든 설정이 완료되면 코드를 실행하여 로그 파일이 제대로 생성되고 로그 메시지가 해당 파일에 기록되는지 확인할 수 있습니다. 지정한 경로에 main.logadditional.log 파일이 생성되었는지 확인하고, 파일 내용을 열어 로그 메시지를 확인해 보세요.

결론

SLF4J와 Log4j를 사용하여 로그 파일을 분리하는 방법을 알아보았습니다. 로그 파일을 분리함으로써 특정 모듈 또는 기능의 로그를 따로 관리할 수 있습니다. 이를 통해 애플리케이션의 디버깅과 모니터링을 더욱 효율적으로 진행할 수 있습니다. 자세한 설정 방법 및 기타 Log4j 기능에 대해서는 Log4j 문서를 참조하시기 바랍니다.

참고 자료