회사에서 특정 로그에 대해서 별도의 파일로 저장해야 하는 요구사항이 발생하였습니다. 기존의 프로젝트에는 Logback이 설정되어 있어 몇 가지 추가 설정을 통해 간단하게 만들 수 있었습니다.
Logback에 대해 장황한 설명은 타 블로그나 사이트에서 자세하게 설명하고 있으니 여기서는 간단하게 설정하는 부분만 작성해 보겠습니다.
1. CustomFilter 구현
아래 코드를 참고해서 CustomFilter를 구현해줍니다.
public class CustomFilter extends Filter<ILoggingEvent> {
@Override
public FilterReply decide(ILoggingEvent event) {
if (event.getMessage().contains("Check")) {
return FilterReply.ACCEPT;
} else {
return FilterReply.DENY;
}
}
}
메시지에 ‘Check’라는 문자열이 포함되어 있으면 로그를 기록하겠다는 의미입니다. 위 코드를 참고해서 필요한 로그만 필터링 하면 됩니다.
2. Logback에 Appender 추가하기
아래 코드를 참고하여 logback.xml 에 정의합니다. 필요한 appender를 추가하고 root에 해당 appender를 추가하는 것이 큰 틀에서 할 일 입니다.
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- Custome Filter -->
<filter class="com.java.test.CustomFilter"/>
<!-- 파일경로 설정 -->
<file>${LOG_PATH}/${LOG_FILE_NAME}.log</file>
<!-- 출력패턴 설정-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- Rolling 정책 (파일 관리설정) -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
<fileNamePattern>${LOG_PATH}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<!-- 파일 크기 지정할떄 사용 -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 파일당 최고 용량 kb, mb, gb -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE " />
</root>
filter에 1번에서 만든 CustomFilter를 등록해주고 root 쪽에 appender-ref 를 적용하면 됩니다. 나머지 설정은 상황에 맞게 정의하면 특별한 문제는 발생하지 않습니다.