【问题标题】:How to configure null appender in log4j2如何在 log4j2 中配置 null appender
【发布时间】:2015-11-22 03:43:52
【问题描述】:

Log4j 1.* 有一个null appender class,但我在 log4j 2 中找不到等价物。有吗?如何在 log4j2.xml 中配置 null appender?

【问题讨论】:

  • 您可以使用任何其他Appender 并简单地添加一个永远不适合的Filter,例如<ThresholdFilter level="TRACE" onMatch="DENY" onMismatch="DENY"/> 您到底需要它做什么?
  • 这不是一个真正的 null appender。

标签: java log4j log4j2 appender


【解决方案1】:

从 Log4j2 2.7 版开始有一个 NullAppender 类。早期版本没有它。它在配置文件中使用的名称是“Null”。它可以像这样添加到 Appenders 列表中:

<Appenders>
  <Null name="arbritrary_name" />
</Appenders>

【讨论】:

    【解决方案2】:

    使用 CountingNoOp 附加程序。

    <Appenders>
      <CountingNoOp name="DEV_NULL" />
    </Appenders>
    

    【讨论】:

    • 起始版本 2.6.1
    【解决方案3】:

    NullAppendar 基本上是(几乎)Appender 接口的empty implementation,使用AppenderSkeleton 作为基类。在 Log4j2 中做同样的事情很简单,但您需要一些样板代码才能使其工作,请参阅 custom appenders 上的 Apache 文档。

    @Plugin(name = "NullAppender", category = "Core", elementType = "appender", printObject = true)
    public class NullAppender extends AbstractAppender {
    
        private static final long serialVersionUID = -701612541126635333L;
    
        private NullAppender(String name, Filter filter, Layout<? extends Serializable> layout) {
            super(name, filter, layout);    
        }
    
        @Override
        public void append(LogEvent event) {
            // do exactly nothing
        }
    
        // blatantly stolen from the Apache doc, all errors (C) by me
        @PluginFactory
        public static NullAppender createAppender(@PluginAttribute("name") String name,
                                                  @PluginElement("Layout") Layout layout,
                                                  @PluginElement("Filters") Filter filter) {
    
            if (name == null) {
                LOGGER.error("No name provided for NullAppender");
                return null;
            }
    
            if (layout == null) {
                layout = PatternLayout.createDefaultLayout();
            }
            return new NullAppender(name, filter, layout);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 2014-08-03
      相关资源
      最近更新 更多