我做了一些谷歌搜索,但找不到任何相关信息。 log4j
支持一堆日志appenders
,网上有关于ConsoleAppender
和FileAppender
的文档,但很少或没有关于appender的信息,例如{{1} }},NullAppender
等。我对JDBCAppender
特别感兴趣。
NullAppender
有没有人对这些有任何具体信息?特别是<appender name="???" class="org.apache.log4j.varia.NullAppender">
<appender name="???" class="org.apache.log4j.jdbc.JDBCAppender">
?
我开始寻找here。
答案 0 :(得分:6)
对于NullAppender
,主要没有很多文档,因为没有任何内容可供配置:您可以使用<appender name="foo" class="org.apache.log4j.varia.NullAppender"/>
来定义一个,这就是它。来自Javadoc:
NullAppender仅存在,它从不向任何设备输出消息。
没有太多不同的方法可以做任何事情。 (它的存在使得您可以在不修改太多配置的情况下删除输出。)
对于JDBCAppender
,Javadoc就在这里:http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/jdbc/JDBCAppender.html
XML配置中的param
标记对应于Java类中的setter,但请注意Javadoc顶部的大红色警告:
警告:此版本的JDBCAppender很可能在将来被完全替换。此外,它不会记录异常。
因此,考虑到log4j v2.0目前处于测试阶段,可能不是最好的类,并且粗略查看alpha release似乎表明它在v2中不存在。 / p>
答案 1 :(得分:0)
答案 2 :(得分:0)
NullAppender 基本上什么也没做,就像其他人已经指出的那样。我只是想布置一些细节。
AppenderSkeleton implements Appender { ... @Override public synchronized void doAppend(LoggingEvent event) { ... } ... abstract protected void append(LoggingEvent event); } public class NullAppender extends AppenderSkeleton { public static String s; public String t; ... @Override public void doAppend(LoggingEvent event) { if(layout != null) { t = layout.format(event); s = t; } } @Override public void append(LoggingEvent event) { }
另请参阅:Source-NullAppender&amp; Source-AppenderSkeleton
每次log.trace / debug / ...调用都会发生什么?
-> org.apache.log4j.Category.forcedLog(String fqcn, Priority level, Object message, Throwable t) -> org.apache.log4j.Category.callAppenders(LoggingEvent event) -> org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(LoggingEvent event) is called on each Appender within that Logger -> org.apache.log4j.Appender.doAppend(LoggingEvent event) which is NullPointers implementation of doAppend in this case.
如您所见,NullAppender会消除同步,NullAppender.doAppend会产生一些开销,但在大多数情况下它都很少。
至于 JDBCAppender ,不应该使用它。
WARNING: This version of JDBCAppender is very likely to be completely replaced in the future. Moreoever, it does not log exceptions.
请参阅:JDBC-Appender-Source第34-36行
作为替代,您可能需要查看clusterlog