Spring boot log4j2 셋팅 방법 정리

2024-02-23


사진: Unsplash 의 NEOM


1. 방법

 

build.gradle
...
configurations {
	configureEach { //기본 스프링의 로그백과의 충돌 방지를 위해 제외시킨다.
		exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
	}
...
}

...
        
dependencies {
...
	implementation "org.springframework.boot:spring-boot-starter-log4j2";
...
}
...

application.properties
...
#logging setting
logging.config=classpath:log4j2/log4j2-local.xml
...

log4j2-local.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>

    <!-- 해당 설정파일에서 사용하는 프로퍼티 해당 위치에 디렉토리 없으면 자동으로 만든다.-->
    <Properties>
        <property name="LOGS_PATH">/test/logs</property>
    </Properties>

    <Appenders>
        <!-- 콘솔 로깅 -->
        <Console name="console" target="SYSTEM_OUT">
                        <PatternLayout pattern="%style{[%d{yyyy-MM-dd HH:mm:ss}:%-3relative] }{white}%highlight{%level}{FATAL=red, ERROR=red, WARN=yellow, INFO=green, DEBUG=cyan, TRACE=cyan} [%style{%t}{cyan}] %style{%logger{35}}{magenta}%n %style{[%l]}{blue}%n:LOG: %msg%n%throwable%n" />
        </Console>

        <!-- 파일 압축 기준-->
        <RollingFile name ="RollingFile">
            <FileName>${LOGS_PATH}/log4j2.log</FileName>
            <FilePattern>${LOGS_PATH}/%d{yyyy-MM-dd}/log4j2.%d{yyyy-MM-dd}.%i.log.gz</FilePattern>
            <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss} %5p [%t] [%c] :LOG: %m%n%throwable</Pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="10KB"/> <!--10MB 이상 시 압축-->
                <TimeBasedTriggeringPolicy interval = "1" modulate = "true"/> <!--파일 패턴의 마지막 시간 패턴으로 인터벌이 계산됨 yyyy-MM-dd 이기 때문에 하루 기준 계산-->
            </Policies>
            <DefaultRolloverStrategy max="10000" fileIndex="min"/> <!--압축된 파일 최대 만개 그 이후는 오버라이딩 됨 첫번쨰 부터-->
        </RollingFile>
    </Appenders>

    <Loggers>
        <!-- Application Loggers -->
        <!-- Root 설정보다 우선순위가 높으며 패키지별 개별 로그 지정 가능 -->
        <logger name="com.example.exp.controller" level="INFO" additivity="false">
            <AppenderRef ref="console" />
            <AppenderRef ref="RollingFile" />
        </logger>

        <logger name="com.example.exp.service" level="INFO" additivity="false">
            <AppenderRef ref="console" />
            <AppenderRef ref="RollingFile" />
        </logger>

        <!-- FATAL, ERROR, WARN, INFO, DEBUG, TRACE -->
        <Root level="INFO">
            <AppenderRef ref="console" />
            <AppenderRef ref="RollingFile" />
        </Root>
    </Loggers>
</Configuration>

메인 이미지 출처 : 사진: UnsplashNEOM