Filter
これは、ロガー名と呼び出しメソッドをチェックする特定のものを実装することで実際に可能です。フィルタは、クラスとメソッド名でLoggingEvent
を取得できる を受け取ります。LocationInfo
これはスタック トレースでリフレクションを使用するため、非常に非効率的であることに注意してください。注意して行ってください。特に、必要な場合にのみリフレクションを実行するように、まずを取得する前にロガー名を確認してください。LocationInfo
フィルターの構成は、XML Log4j 構成ファイルを介してのみ可能です。
迅速な実装:
フィルタ クラス:
public class MethodBasedFilter extends Filter {
@Override
public int decide(LoggingEvent event) {
if (event.getLoggerName().equals(LoggingWithMethodFiltering.class.getCanonicalName())) {
if (event.getLocationInformation().getMethodName().equals("filteredMethod")) {
return Filter.DENY;
}
}
return Filter.NEUTRAL;
}
}
フィルタリングされたクラス:
public class LoggingWithMethodFiltering {
private static final Logger LOG = Logger.getLogger(LoggingWithMethodFiltering.class);
public static void unfilteredMethod() {
LOG.info("I am not filtered");
}
public static void filteredMethod() {
LOG.info("I am filtered and will never appear");
}
public static void main(String[] args) {
unfilteredMethod();
filteredMethod();
}
}
log4j.xml
:_
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender name="Console" class="org.apache.log4j.ConsoleAppender">
<param name="threshold" value="trace" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p|%-20.20t|%d{HH:mm:ss,SSS}|%20.30c{1} %25.25F:%-4L - %20.20M - %m%n" />
</layout>
<filter class="MethodBasedFilter" />
</appender>
<root>
<level value="trace" />
<appender-ref ref="Console" />
</root>
</log4j:configuration>