로그는 애플리케이션에서 발생하는 중요한 정보를 추적하고 기록하는 데 사용됩니다. Log4j는 Java 애플리케이션에서 로그를 관리하고 출력하는 데 널리 사용되는 강력한 로깅 라이브러리입니다. 로그 파일의 크기가 계속해서 증가하면 디스크 공간을 낭비하게 되므로 로그 파일의 크기를 제한하고 주기적으로 로그 파일을 백업하는 것이 중요합니다. 이를 위해 Log4j는 로그 회전 기능을 제공합니다.
로그 회전은 특정 크기에 도달하거나 특정 기간이 지난 후에 로그 파일을 백업하고 새로운 로그 파일을 생성하는 프로세스입니다. 이를 통해 로그 파일의 크기를 제한하고 관리할 수 있습니다. Log4j에서는 RollingFileAppender를 사용하여 로그 회전을 구성할 수 있습니다.
Log4j RollingFileAppender 구성
RollingFileAppender는 Log4j에서 파일로 로그를 기록하는 데 사용되는 Appender입니다. 아래의 예제 코드에서는 RollingFileAppender를 사용하여 로그 파일 회전을 구성하는 방법을 보여줍니다.
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.appender.rolling.RollingFileAppender;
import org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy;
import org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy;
import org.apache.logging.log4j.core.config.Configurator;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.layout.PatternLayout;
public class LogRotationExample {
private static final Logger logger = LogManager.getLogger(LogRotationExample.class);
public static void main(String[] args) {
// 로그 파일 위치 및 이름
String logFilePath = "/path/to/log/file.log";
// 로그 파일 회전 설정
Configuration configuration = Configurator.initialize("Example", "log4j2.xml");
RollingFileAppender appender = RollingFileAppender.newBuilder()
.withFileName(logFilePath)
.withFilePattern(logFilePath + ".%d{yyyy-MM-dd}")
.withPolicy(SizeBasedTriggeringPolicy.createPolicy("10MB"))
.withPolicy(TimeBasedTriggeringPolicy.createPolicy("1", null))
.withLayout(PatternLayout.newBuilder().withPattern("%d [%t] %-5level %logger{36} - %msg%n").build())
.setName("RollingFile")
.build();
appender.start();
((org.apache.logging.log4j.core.Logger) logger).addAppender(appender);
logger.setLevel(Level.ALL);
// 로그 기록 예시
logger.info("This is an example log message.");
}
}
위의 코드에서는 log4j2.xml
을 초기화하여 Log4j 구성을 설정합니다. RollingFileAppender.newBuilder()
를 사용하여 회전 파일 앱 환경을 생성하고 필요한 설정을 추가합니다.
withFileName
: 기본 로그 파일의 경로 및 이름을 지정합니다.withFilePattern
: 백업 로그 파일의 패턴을 지정합니다. 여기에서%d{yyyy-MM-dd}
는 현재 날짜로 파일 이름을 생성하는데 사용됩니다.withPolicy
: 로그 파일 회전을 트리거하는 정책을 지정합니다.SizeBasedTriggeringPolicy
는 로그 파일 크기를 기준으로 회전하고TimeBasedTriggeringPolicy
는 시간을 기준으로 회전합니다. 여기서는 10MB 크기로 회전하는 정책과 1일마다 회전하는 정책을 사용합니다.withLayout
: 로그 메시지의 형식을 지정합니다. 위의 예제에서는%d [%t] %-5level %logger{36} - %msg%n
로 로그 메시지를 형식화합니다.setName
: 앱 환경의 이름을 설정합니다.
마지막으로, logger
에 앱 환경을 추가하고 로그 레벨을 설정합니다. 위의 예제에서는 Level.ALL
을 사용하여 모든 로그 레벨을 출력하도록 설정하였습니다.
이제 Log4j를 사용하여 로그를 기록하고 회전하는 방법을 알았습니다. 로그 회전 기능을 활성화하여 로그 파일의 크기를 유지하고 디스크 공간을 효율적으로 관리할 수 있습니다.
참고 자료
- Log4j 공식 문서: https://logging.apache.org/log4j/2.x/
- Log4j2 Getting Started Guide: https://logging.apache.org/log4j/2.x/manual/getting-started.html