Log Rolling

1 minute read

Written by BGKim, VCANUS

Log4j2

Add maven dependency

pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

spring-boot-starter

‘spring-boot-starter’의 기본 로깅을 제외 시킨다.

lombok

클래스 상단에 @log4j2을 사용, log작성시 로거객체 생성이 필요없다.

Add log4j2.xml in folder resources

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" moniterInterval="30">
    <Properties>
        <Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} %p %M %m%n</Property>
        <Property name="LOG_ROOT">log</Property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${LOG_PATTERN}" />
        </Console>

        <RollingFile name="RollingFile"
                     fileName="${LOG_ROOT}/application.log"
                     filePattern="${LOG_ROOT}/application-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="${LOG_PATTERN}" />
            <Policies>
                <SizeBasedTriggeringPolicy size="300KB" />
                <TimeBasedTriggeringPolicy interval="1"/>
            </Policies>
            <DefaultRolloverStrategy max="3" />
        </RollingFile>

    </Appenders>
    <Loggers>
        <Logger level="info" name="com.vcanus" additivity="false">
            <AppenderRef ref="RollingFile" />
        </Logger>

        <Root level="info">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

<Configuration status=”warn” moniterInterval=”30”>

‘status’는 로그 로딩시에 하는 로깅 기준 레벨이다.

‘moniterInterval’은 설정 변경을 체크하는 주기, 변경시 재설정.

<Property name=””>value<>

미리 사용할 자원을 설정할 수 있다. 여기서는 로그패턴과 루트경로를 설정하였다.

<Appenders>

실제 로그를 작성해주는 객체. Console, RollingFile, File, JDBC, Kafka 등 많은 appender를 지원한다.

<Policies>

RollingFile의 설정을 할 수 있다. 크기, 시간을 트리거로 새로운 로그를 생성 (패턴에서 %i 부분이 변한다)

<DefaultRolloverStrategy max=”2” \/>

rolling되어 쌓이는 개수의 최대를 설정, ex)1-1.log 1-2.log 1-3.log(x) 2-1.log 2-2.log

<Logger level=”info” name=”com.vcanus” additivity=”false”>

로그 객체이다. level설정, name설정, additivity설정이 가능하다

위에서 정의한 appender를 설정하여 원하는 로그방식으로 출력

name을 패키지 경로 사용시 해당 경로의 로그만 출력

additivity는 상위로거(패키지 상위 로거 혹은 루트로거)의 전달을 받을지 설정

Use

@Log4j2
public class TempClass{
    
    public tempMethod(){
        log.debug("debug level");
        log.info("info level");
        log.warn("warn level");
        log.error("error level");
    }
}

Leave a comment