본문 바로가기
WEB/SERVER

특정 문자열을 포함한 SQL 쿼리문이 로그로 출력되지 않도록 필터링

by iiaii 2023. 4. 17.
반응형

Log4j 1.x에서는 org.apache.log4j.spi.Filter 인터페이스를 구현하여 직접 필터를 만들어 사용해야 합니다. 필터는 로그 이벤트를 받아서 필터링한 뒤, 허용되는 로그 이벤트는 다음 단계로 전달하고, 거부되는 로그 이벤트는 출력하지 않습니다.

아래는 Log4j 1.x에서 직접 필터를 만드는 예시입니다.

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

public class SqlFilter extends Filter {
    private String keyword; // 필터링할 문자열

    public void setKeyword(String keyword) {
        this.keyword = keyword;
    }

    public String getKeyword() {
        return keyword;
    }

    public int decide(LoggingEvent event) {
        if (event.getRenderedMessage().contains(keyword)) { // 로그 이벤트의 메시지에 필터링할 문자열이 포함되어 있다면
            return Filter.DENY; // 거부
        } else {
            return Filter.ACCEPT; // 승인
        }
    }
}

위와 같이 필터 클래스를 만든 뒤, log4j.properties 또는 log4j.xml 파일에서 필터를 사용하도록 설정합니다.

<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/>
    </layout>
    <filter class="com.example.SqlFilter">
        <param name="keyword" value="SELECT * FROM my_table WHERE"/>
    </filter>
</appender>

반응형