2

我已经围绕它进行了一些谷歌搜索,但找不到任何相关信息。log4j支持一堆日志appenders,网上到处都是关于ConsoleAppenderand的文档,但是关于 appender等FileAppender的信息很少或没有。我特别感兴趣。NullAppenderJDBCAppenderNullAppender

<appender name="???" class="org.apache.log4j.varia.NullAppender">
<appender name="???" class="org.apache.log4j.jdbc.JDBCAppender">

有没有人有关于这些的任何具体信息?特别是在NullAppender

我开始寻找这里

4

3 回答 3

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 类中的设置器,但是请注意 Javadoc 顶部的大红色警告:

警告:这个版本的 JDBCAppender 将来很可能会被完全替换。此外,它不会记录异常。

因此,鉴于 log4j v2.0 目前处于测试阶段,并且粗略查看alpha 版本似乎表明它在 v2 中不存在,因此可能不是最值得依赖的类。

于 2012-09-21T20:10:50.220 回答
0

一个简单的谷歌这门课会让你

Nullappender

所以本质上,如果你使用 NullAppender,你的日志消息就不会写在任何地方。

于 2012-09-21T19:43:32.870 回答
0

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

于 2012-09-25T07:54:09.373 回答