[ log4j2 ] RollingFileAppender 설정
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번째 로그파일이 지워진다
그리고 돌려보면 로그파일이 생성되고 있는것을 확인 할 수 있다