(log4j2) RollingFile DefaultRolloverStrategy 날짜 기준 최대 로그 파일 개수 설정 방법
해당 포스팅에서는 로깅 프레임워크로 'log4j2'를 사용하면서 잘못된 <RollingFile> Appender 설정으로 인해 지정된 기간이 지난 로그 파일이 자동으로 삭제되지 않았던 문제의 원인과 수정 내용을 기록하였습니다.
1. 잘못되었던 <DefaultRolloverStrategy> 설정
<!-- File Appender -->
<RollingFile name="FileAppender" fileName="/examplePath/log4j2.log" filePattern="/examplePath/log4j2_%d{yyyy-MM-dd}.log">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
<DefaultRolloverStrategy max="7" fileIndex="min"/>
</RollingFile>
(기존에 설정된 RollingFile Appender 설정)
원하는 기능은 로그 파일을 날짜 패턴으로 1일 기준 롤오버하여 최대 7일간의 로그 파일만 보관하고 그 이상된 로그 파일은 자동으로 삭제하는 것이었는데요.
하지만 위 설정은 원하는 대로 동작하지 않았고, 7일이 지난 로그 파일이 계속해서 디렉터리에 남아있었습니다.
원인은 <DefaultRolloverStrategy max="7" /> 부분이었는데요. DefaultRolloverStrategy의 max는 아래와 같은 인덱스(i) 기반 롤링에서만 의미가 있는 것으로 '%i'와 같이 같은 날짜에 여러 개의 로그가 생길 수 있는 상황을 처리하기 위한 옵션이었기 때문에 원하는 기능에는 맞지 않는 설정이었습니다.
filePattern="log4j2_%d{yyyy-MM-dd}_%i.log"
2. 수정된 <DefaultRolloverStrategy> 설정
<!-- File Appender -->
<RollingFile name="FileAppender" fileName="/examplePath/log4j2.log" filePattern="/examplePath/log4j2_%d{yyyy-MM-dd}.log">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="/examplePath" maxDepth="1">
<IfLastModified age="7d" />
<IfFileName glob="log4j2_*.log" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
(수정된 RollingFile Appender 설정)
수정된 설정은 <DefaultRolloverStrategy> 하위에 <Delete> 부분을 명시하는 것인데요.
basePath를 통해 삭제할 로그 파일의 기본 디렉터리를 지정하고, maxDepth 옵션을 통해 basePath 하위 디렉터리 중 어느 뎁스에 있는 디렉터리까지의 파일을 삭제할지 설정할 수 있습니다.
이어서 <IfLastModified age="7d" /> 부분을 통해 '삭제 대상 파일의 수정 시간 기준 조건'을 설정하는데요.
age는 시간 단위의 문자열로 d(일), h(시간), m(분), s(초) 기준의 값을 지정할 수 있습니다.
<IfFileName glob="log4j2_*.log" /> 부분을 통해서는 '삭제 대상 파일의 파일명 패턴'을 설정할 수 있습니다.
(TimeBasedTriggeringPolicy의 modulate 옵션이 'true'인 경우 정확한 단위 시간 경계선을 기준으로 롤오버를 수행하게 됩니다. 하루 단위의 경우 00:00:00 기준)
이렇게 수정된 log4j2.xml 파일을 통해 날짜 기반 '%d{yyyy-MM-dd}' filePattern에서 지정한 날짜가 지난 로그 파일이 자동으로 삭제되는 것을 확인할 수 있었습니다.
< log4j2 연관 포스팅 >
2024.08.25 - [Programming/Spring] - (spring project) log4j2 로그 파일 분리하기
2024.02.27 - [Programming/Spring] - (spring) logback, log4j2 로깅 적용 과정과 xml 파일 차이점 정리
'Programming > Spring' 카테고리의 다른 글
파일 업로드 시 net::ERR_CONNECTION_RESET 오류 발생 원인 및 해결 방법 (1) | 2025.01.30 |
---|---|
Spring MVC, SimpleMappingExceptionResolver를 통한 간단한 예외 처리 방법 (0) | 2025.01.25 |
(MyBatis) include refid 용도 및 사용 방법 (3) | 2024.12.14 |
Logback PatternLayout을 통한 로그 마스킹 처리 방법 (1) | 2024.11.02 |
(spring project) log4j2 로그 파일 분리하기 (1) | 2024.08.25 |