[java] Log4j의 로그 필터에서 특정 예외만 출력 처리 방법

Log4j는 Java 어플리케이션에서 로깅을 처리하기 위한 강력한 도구입니다. 로그 필터를 사용하면 특정 조건에 따라 로그를 필터링하고 처리할 수 있습니다. 이번 글에서는 Log4j의 로그 필터를 사용하여 특정 예외만 출력하는 방법에 대해 알아보겠습니다.

로그 필터 설정하기

Log4j의 로그 필터는 Filter 인터페이스를 구현하는 클래스로 사용됩니다. 필터링하고자 하는 로그 이벤트를 처리하기 위해 decide() 메서드를 구현해야 합니다. 이 메서드는 각 로그 이벤트에 대해 호출되고, 필터링 여부를 결정하는 로직을 구현해야 합니다.

아래는 예제 필터 클래스 입니다.

import org.apache.log4j.spi.Filter;
import org.apache.log4j.spi.LoggingEvent;

public class ExceptionFilter extends Filter {
    
    @Override
    public int decide(LoggingEvent event) {
        if(event.getThrowableInformation() != null) {
            Throwable throwable = event.getThrowableInformation().getThrowable();
            if(throwable instanceof MyException) {
                return Filter.NEUTRAL;
            } else {
                return Filter.DENY;
            }
        }
        
        return Filter.ACCEPT;
    }
    
}

위의 예제에서는 Filter 클래스를 상속하고 decide() 메서드를 구현했습니다. LoggingEvent 객체에서 발생한 예외 정보를 확인하고, 특정 예외 (예: MyException) 인 경우는 필터링하지 않고, 그 외의 예외는 필터링합니다.

필터 설정 파일에 로그 필터 추가하기

로그 필터를 적용하기 위해서는 Log4j 설정 파일을 수정해야 합니다. 일반적으로 log4j.properties 또는 log4j.xml 파일을 사용합니다.

아래는 log4j.xml 파일에 로그 필터를 추가하는 예제입니다.

<?xml version="1.0" encoding="UTF-8"?>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %c{1}:%L - %m%n" />
        </layout>
        <filter class="com.example.ExceptionFilter" />
    </appender>
    
    <root>
        <priority value="INFO" />
        <appender-ref ref="STDOUT" />
    </root>
    
</log4j:configuration>

위의 예제에서는 STDOUT 앱던더에 com.example.ExceptionFilter 필터를 추가했습니다. 이렇게 설정하면 STDOUT 앱던더에서 특정 예외만 출력되고, 다른 예외는 필터링됩니다.

참고 자료