JAVA Logback Custom Filter 만들기

회사에서 특정 로그에 대해서 별도의 파일로 저장해야 하는 요구사항이 발생하였습니다. 기존의 프로젝트에는 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 를 적용하면 됩니다. 나머지 설정은 상황에 맞게 정의하면 특별한 문제는 발생하지 않습니다.

함께 읽으면 좋은 글

Python ‘utf8mb4_0900_ai_ci’ 오류 발생 해결 방법

Chart.js 가운데 정렬하는 방법

Python “module ‘telegram’ has no attribute ‘Bot’” 해결 방법

goodnewswellnesslifestyle-이미지
Good Life

세상에 필요한 정보를 제공합니다.

error: