NullAppender基本上什么都不做,就像其他人已经指出的那样。我只是想布置一些细节。
AppenderSkeleton 实现 Appender {
...
@覆盖
公共同步无效doAppend(LoggingEvent事件){
...
}
...
抽象受保护的无效附加(LoggingEvent 事件);
}
公共类 NullAppender 扩展 AppenderSkeleton {
公共静态字符串;
公共字符串 t;
...
@覆盖
公共无效doAppend(LoggingEvent事件){
如果(布局!= null){
t = layout.format(event);
s = t;
}
}
@覆盖
公共无效附加(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) 在该 Logger 中的每个 Appender 上调用
-> org.apache.log4j.Appender.doAppend(LoggingEvent 事件)
在这种情况下,这是 doAppend 的 NullPointers 实现。
如你所见,NullAppender 带走了同步,NullAppender.doAppend 产生了一些开销,但在大多数情况下很少。
至于JDBCAppender它不应该被使用。
警告:此版本的 JDBCAppender
未来很可能会被完全取代。此外,
它不记录异常。
请参阅:JDBC-Appender-Source第 34-36 行
作为替代方案,您可能需要查看clusterlog