Как настроить нулевое приложение в log4j2

Log4j 1.* имеет нулевой класс добавления, но я не смог найти эквивалент в log4j 2. Есть ли он? Как настроить нулевое приложение в log4j2.xml?


person Meng Lu    schedule 27.08.2015    source источник
comment
Вы можете использовать любой другой Appender и просто добавить Filter, который никогда не подходит, например, <ThresholdFilter level="TRACE" onMatch="DENY" onMismatch="DENY"/> Для чего именно он вам нужен?   -  person Florian Schaetz    schedule 27.08.2015
comment
Это не настоящий нулевой аппендикс.   -  person Meng Lu    schedule 07.09.2015


Ответы (3)


Существует класс NullAppender начиная с версии Log4j2 2.7. В более ранних версиях его не было. Имя, которое он использует в файле конфигурации, — «Null». Его можно добавить в список Appenders следующим образом:

<Appenders>
  <Null name="arbritrary_name" />
</Appenders>
person Peter Dolberg    schedule 27.01.2017

NullAppendar был в основном (почти) пустая реализация интерфейса Appender с использованием AppenderSkeleton в качестве базового класса. Сделать то же самое в Log4j2 тривиально, но вам понадобится некоторый шаблонный код, чтобы заставить его работать, см. документацию 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);
    }

}
person Florian Schaetz    schedule 07.09.2015

Используйте приложение CountingNoOp.

<Appenders>
  <CountingNoOp name="DEV_NULL" />
</Appenders>
person Doug Berkland    schedule 27.09.2016
comment
Начиная с версии 2.6.1 - person mcoolive; 16.02.2017