쩨이엠 개발 블로그

[ log4j2 ] RollingFileAppender 설정 본문

개발/ETC

[ log4j2 ] RollingFileAppender 설정

쩨이엠 2020. 12. 24. 02:04
728x90
반응형

Log4j2에서 제일 많이 쓰는건 아무래도 RollingFile로 하루 혹은 시간마다 넘어갈 수 있게 만드는 설정이다

열심히 찾은 김에 정리한다

 

build.gradle

 plugins {
    id 'java'
    id 'org.springframework.boot' version '2.3.4.RELEASE'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
 }

 group 'com.test.demo'
 version '1.0-SNAPSHOT'

 repositories {
    mavenCentral()
 }
 configurations {
     compile.exclude module: 'spring-boot-starter-logging'
 }
 dependencies {
 ...
 	//log
	implementation 'org.springframework.boot:spring-boot-starter-log4j2'
 }

spring boot에서 log4j2를 쓰려면 spring-boot-starter-logging 모듈을 제외시켜야 에러가 나지 않는다

 

application.yml


 ...
 logging:
  config: classpath:log4j2/log4j2-${spring.profiles.active}.xml
 ...
 

application.yml에는 classpath로 적용해도 되고 아니면 직접 yml에 적어도 상관은 없다

 

 

log4j2-local.xml

 
 <?xml version="1.0" encoding="UTF-8"?>
 <Configuration status="warn" packages="org.apache.logging.log4j.core,io.sentry.log4j2">
    <Properties>
        <Property name="FILE_LOG_PATTERN">%d{yyyy-MM-dd_HH:mm:ss.SSS} %level [%thread] [%logger:%line] ::: %msg%n</Property>
     </Properties>
    <Appenders>
        <RollingFile name="LogToFile" fileName="logs/application.log"
                     filePattern="logs/application.log.%d{yyyy-MM-dd-hh-mm}">
            <PatternLayout pattern="${sys:FILE_LOG_PATTERN}" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
            <DefaultRolloverStrategy>
                <Delete basePath="logs" maxDepth="1">
                    <IfAccumulatedFileCount exceeds="3"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="org.springframework.web" level="info"/>
        <Logger name="org.springframework.security" level="info"/>
        <logger name="org.springframework.data.r2dbc" level="info"/>
        <Logger name="com.skp.iot" level="info"/>
        <Root level="info">
            <AppenderRef ref="LogToFile"/>
        </Root>
    </Loggers>
 </Configuration>
 

RollingFile 

- name : 밑의 AppenderRef의 ref에 쓰일 이름 

- fileName : 저장되는 위치와 로그파일 이름

- filePattern : Rolling시 저장될 위치와 로그파일 이름

    - yyyy-MM-dd : 일마다 

    - yyyy-MM-dd-hh : 시간마다

    - yyyy-MM-dd-hh-mm : 분마다

 

- Policies : 정책. 이 경우는 시간베이스로 interval(1분)마다 로그파일이 생성된다

- DefaultRolloverStrategy : 시간베이스가 아닌 경우는 이 요소의 max값이 먹히나 시간베이스인경우 먹히지 않았다

해서 찾아보니 Delete 정책을 넣어줘야한다고 함

    - Delete maxDepth : 지울 Depth. 파일만 지울 땐 1을 넣어준다

    - IfAccumulateFileCount exceeds : 이 값을 넘을 시 파일이 제거된다 예시의 경우(exceeds="3") 3번째 로그파일이 쌓일 때 1번째 로그파일이 지워진다

 

그리고 돌려보면 로그파일이 생성되고 있는것을 확인 할 수 있다

 

728x90
반응형
Comments