Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于log4j.xml NullAppender_Java_Logging_Log4j - Fatal编程技术网

Java 关于log4j.xml NullAppender

Java 关于log4j.xml NullAppender,java,logging,log4j,Java,Logging,Log4j,我用谷歌搜索了一下,但找不到任何相关信息log4j支持一组日志Appender,网上到处都有关于ConsoleAppender和FileAppender的文档,但是关于Appender的信息很少或根本没有,例如NullAppender,jdbappender等。我对NullAppender特别感兴趣 <appender name="???" class="org.apache.log4j.varia.NullAppender"> <appender name="???" cla

我用谷歌搜索了一下,但找不到任何相关信息
log4j
支持一组日志
Appender
,网上到处都有关于
ConsoleAppender
FileAppender
的文档,但是关于Appender的信息很少或根本没有,例如
NullAppender
jdbappender
等。我对
NullAppender
特别感兴趣

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

这门课的一个简单的谷歌搜索就能帮你找到答案


因此,基本上,如果您使用NullAppender,您的日志消息将不会被写入任何地方。

对于
NullAppender
,没有太多文档,主要是因为没有什么可配置的:您可以使用
定义一个
XML配置中的
param
标记对应于Java类中的setter,但请注意Javadoc顶部的红色大警告:

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

因此,考虑到log4jv2.0目前处于beta版,粗略地看一下似乎表明它在v2中不存在,可能不是最好的依赖类。

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) { } AppenderSkeleton实现Appender{ ... @凌驾 公共同步的void doAppend(LoggingEvent事件){ ... } ... 抽象保护无效附加(LoggingEvent事件); } 公共类NullAppender扩展了AppenderSkleton{ 公共静态字符串s; 公共字符串t; ... @凌驾 公共无效doAppend(记录事件){ if(布局!=null){ t=布局。格式(事件); s=t; } } @凌驾 公共作废附加(记录事件){ } 另见:

每次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. ->org.apache.log4j.Category.forcedLog(字符串fqcn、优先级、对象消息、Throwable t) ->org.apache.log4j.Category.callAppenders(LoggingEvent事件) ->对该记录器中的每个Appender调用org.apache.log4j.helpers.appenderatachableimpl.appenderlooponappenders(LoggingEvent事件) ->org.apache.log4j.Appender.doAppend(LoggingEvent事件) 这是本例中doAppend的空指针实现。 正如您所看到的,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. 警告:此版本的JDBCAppender 很可能在未来被完全取代。而且, 它不记录异常。 见:第34-36行


另一种选择是,您可能想查看一下是否方便。如果我不想将日志消息附加到任何位置,为什么要使用此选项?任何特定示例?假设我有一个类别的层次结构树。我希望某个级别或更低级别的所有类别都不记录任何内容。我可以确定该级别并将阈值设置为“无”。这是doesn无法解决我的问题,因为我可以有几十个子类别声明覆盖NONE设置。要解决这个问题,我可以将pinpoint类别的appender设置为NullAppender,appender Additionity设置为false。当我稍后改变主意时,请反转更改。这两次我都可以将所有子类别声明单独保留。诚然,注释切换也可以达到同样的效果。嗯,我对此也不太乐观:)但无论如何还是要谢谢你。@Annjawn如果你真的需要登录到你的数据库,你最好的选择可能是,要么扩展现有的数据库,要么只是实现Appender接口。是的,我本来会这么做的,但现在我对c很满意onsole和文件追加器。