他の人がすでに指摘しているように、NullAppenderは基本的に何もしません。私はいくつかの詳細をレイアウトしたかっただけです。
AppenderSkeleton は Appender {
...
@オーバーライド
パブリック同期ボイド doAppend(LoggingEvent イベント) {
...
}
...
abstract protected void append(LoggingEvent イベント);
}
public class NullAppender extends AppenderSkeleton {
public static String s;
パブリック文字列 t;
...
@オーバーライド
public void doAppend(LoggingEvent イベント) {
if(レイアウト!=ヌル) {
t = layout.format(イベント);
s = t;
}
}
@オーバーライド
public void append(LoggingEvent イベント) {
}
参照: Source-NullAppender & Source-AppenderSkeleton
各 log.trace/debug/... 呼び出しで何が起こるかは
-> org.apache.log4j.Category.forcedLog(String fqcn, Priority level, Object message, Throwable t)
-> org.apache.log4j.Category.callAppenders(LoggingEvent イベント)
-> org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(LoggingEvent event) は、そのロガー内の各アペンダーで呼び出されます
-> org.apache.log4j.Appender.doAppend(LoggingEvent イベント)
この場合、これは doAppend の NullPointers 実装です。
ご覧のとおり、NullAppender によって同期が取り除かれ、NullAppender.doAppend によってオーバーヘッドが発生しますが、ほとんどのシナリオではわずかです。
JDBCAppenderは使用しないでください。
警告: このバージョンの JDBCAppender
将来的に完全に置き換わる可能性が非常に高いです。さらに、
例外は記録されません。
参照: JDBC-Appender-Source行 34-36
別の方法として、clusterlogを確認することもできます