关于log4j.xml NullAppender

时间:2012-09-21 19:25:37

标签: java logging log4j

我做了一些谷歌搜索,但找不到任何相关信息。 log4j支持一堆日志appenders,网上有关于ConsoleAppenderFileAppender的文档,但很少或没有关于appender的信息,例如{{1} }},NullAppender等。我对JDBCAppender特别感兴趣。

NullAppender

有没有人对这些有任何具体信息?特别是<appender name="???" class="org.apache.log4j.varia.NullAppender"> <appender name="???" class="org.apache.log4j.jdbc.JDBCAppender">

我开始寻找here

3 个答案:

答案 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)

本课程的简单谷歌将为您提供

Nullappender

因此,如果您使用NullAppender,那么您的日志消息将无处可写。

答案 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