사용 된 기술 : Java SE 1.8 | Log4j 2.8.2 | 메이븐 3.3.9 | Jackson API 2.8.7 | Eclipse Neon.3
RollingFileAppender는 특정 크기 제한에 도달하거나 날짜 / 시간 패턴이 더 이상 적용되지 않으면 로그 파일을 롤오버하는 파일 첨부 프로그램입니다.
이 글에서는,를 사용 RollingFileAppender
하여 이전 로그 파일을 백업하고 압축하는 방법을 설명합니다 -
Jar dependencies
pom.xml
파일을 편집하고 log4j2 및 Jackson API 종속성을 추가하십시오.
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.7</version>
</dependency>
</dependencies>
날짜 및 시간을 기준으로 롤링
TimeBasedTriggeringPolicy 를 사용하여 <FilePattern/>
다음과 같이 요소에 사용 된 날짜 및 시간 패턴을 기반으로 로그 파일을 롤오버 할 수 있습니다 .
<RollingFile name="RollingFile">
<FileName>C:/log/mylog.log</FileName>
<FilePattern>C:/log/time-based-logs/%d{yyyy-MM-dd-hh-mm}.log.zip</FilePattern>
<PatternLayout>
<Pattern>%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="2" modulate="true" />
</Policies>
<DefaultRolloverStrategy max="5" />
</RollingFile>
다음은 날짜 / 시간에 기초한 파일 롤링의 날짜 / 시간 패턴 샘플입니다.
날짜 / 시간 패턴 | 기술 | Intervale 속성 예 |
---|---|---|
% d {yyyy-MM-dd-hh-mm} .log.zip | 매분마다 로그 파일 롤링 | interval = 2이면 2 분마다 롤오버가 발생합니다. 예 : 2017-07-26-09-57.log.zip , 2017-07-26-09-59.log.zip , 2017-07-26-10-01.log.zip , 2017-07-26- 10-03.log.zip 등 .. |
% d {yyyy-MM-dd-hh} .log.zip | 로그 파일을 매 시간 롤업하십시오. | interval = 4이면 4 시간마다 롤오버가 발생합니다. 예 : 2017-07-26-09.log.zip , 2017-07-26-10.log.zip , 2017-07-26-11.log.zip 등 |
% d {yyyy-MM-dd} .log.zip | 매일 로그 파일 롤링 | interval = 1이면 롤오버가 매일 발생합니다. 예 : 2017-07-26.log.zip , 2017-07-27.log.zip 등 |
다음은 log4j2.xml
2 분마다 파일을 롤링하기위한 파일 의 전체 예제입니다 .
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<!-- Console Appender -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<!-- Rolling File Appender -->
<RollingFile name="RollingFile">
<FileName>C:/log/mylog.log</FileName>
<FilePattern>C:/log/time-based-logs/%d{yyyy-MM-dd-hh-mm}.log.zip</FilePattern>
<PatternLayout>
<Pattern>%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="2" modulate="true" />
</Policies>
<DefaultRolloverStrategy max="5" />
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.boraji.tutorial.log4j2" level="debug" additivity="false">
<AppenderRef ref="RollingFile" />
<AppenderRef ref="Console" />
</Logger>
<Root level="trace">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
<DefaultRolloverStrategy>
요소를 제거하기 전에 5 개의 파일을 유지하는 롤오버 전략을 정의합니다.
위의 log4j 2 구성을 테스트하는 간단한 Java 프로그램.
MainApp.java
package com.boraji.tutorial.log4j2;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class MainApp {
private static final Logger logger = LogManager.getLogger(MainApp.class);
public static void main(String[] args) {
for (int i = 0; i < 10000; i++) {
logger.info("Rolling file appender example...");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
파일 크기에 따른 롤링
SizeBasedTriggeringPolicy 를 사용하여 다음과 같이 파일 크기에 따라 로그 파일을 롤오버 할 수 있습니다 .
<RollingFile name="RollingFile">
<FileName>C:/log/mylog.log</FileName>
<FilePattern>C:/log/size-based-logs/%d{yyyy-MM-dd-hh}-%i.log.zip</FilePattern>
<PatternLayout>
<Pattern>%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10 KB"/>
</Policies>
<DefaultRolloverStrategy max="5" />
</RollingFile>
KB, MB 또는 GB 접미 부와 함께 파일 크기를 바이트 단위로 지정할 수 있습니다.
다음은 요소 log4j2.xml
의 지정된 크기를 기반으로 파일 롤링을위한 전체 파일입니다 <SizeBasedTriggeringPolicy/>
.
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<!-- Console Appender -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<!-- Rolling File Appender -->
<RollingFile name="RollingFile">
<FileName>C:/log/mylog.log</FileName>
<FilePattern>C:/log/size-based-logs/%d{yyyy-MM-dd-hh}-%i.log.zip</FilePattern>
<PatternLayout>
<Pattern>%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10 KB" />
</Policies>
<DefaultRolloverStrategy max="5" />
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.boraji.tutorial.log4j2" level="debug" additivity="false">
<AppenderRef ref="RollingFile" />
<AppenderRef ref="Console" />
</Logger>
<Root level="trace">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
다음은 위의 log4j2.xml 설정을 테스트하는 간단한 자바 프로그램이다.
package com.boraji.tutorial.log4j2;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class MainApp {
private static final Logger logger = LogManager.getLogger(MainApp.class);
public static void main(String[] args) {
for (int i = 0; i < 50000; i++) {
logger.info("Rolling file appender example...");
}
}
}
cron 표현식을 기반으로 한 롤링
다음과 같이 CronTriggeringPolicy 를 사용하여 지정된 cron 표현식을 기반으로 로그 파일을 롤오버 할 수 있습니다 .
<RollingFile name="RollingFile">
<FileName>C:/log/mylog.log</FileName>
<FilePattern>C:/log/cron-based-logs/%d{yyyy-MM-dd-hh-mm}-%i.log.zip</FilePattern>
<PatternLayout>
<Pattern>%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n</Pattern>
</PatternLayout>
<Policies>
<CronTriggeringPolicy schedule="0 0/2 * 1/1 * ? *" />
</Policies>
<DefaultRolloverStrategy max="5" />
</RollingFile>
다음은 cron 표현식에 의해 엘리먼트의 속성에 log4j2.xml
지정된 매 2 분마다 롤오버를 트리거 하는 전체 파일 입니다.schedule
<CronTriggeringPolicy/>
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<!-- Console Appender -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<!-- Rolling File Appender -->
<RollingFile name="RollingFile">
<FileName>C:/log/mylog.log</FileName>
<FilePattern>C:/log/cron-based-logs/%d{yyyy-MM-dd-hh-mm}-%i.log.zip</FilePattern>
<PatternLayout>
<Pattern>%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n</Pattern>
</PatternLayout>
<Policies>
<CronTriggeringPolicy schedule="0 0/2 * 1/1 * ? *" />
</Policies>
<DefaultRolloverStrategy max="5" />
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.boraji.tutorial.log4j2" level="debug" additivity="false">
<AppenderRef ref="RollingFile" />
<AppenderRef ref="Console" />
</Logger>
<Root level="trace">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
다음은 위의 log4j2.xml 설정을 테스트하는 간단한 자바 프로그램이다.
package com.boraji.tutorial.log4j2;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class MainApp {
private static final Logger logger = LogManager.getLogger(MainApp.class);
public static void main(String[] args) {
for (int i = 0; i < 1000; i++) {
logger.info("Rolling file appender example...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
'JAVA/SPRING > SPRING-BOOT' 카테고리의 다른 글
[Spring-boot]eclipse에서 Maven 으로 OpenCV 사용하기 (0) | 2018.02.09 |
---|---|
Spring Boot RESTFul Web Service Example – GET/POST/PUT/PATCH/DELETE (0) | 2018.02.01 |
[Spring Boot]log4j2 구성 튜토리얼 (0) | 2017.12.05 |
[Spring Boot]Spring MVC 웹 튜토리얼 (0) | 2017.12.05 |
스프링 부트 샘플 git 모음 (0) | 2017.12.05 |