log4j2 добавление регистратора + аппендера по коду

Я пытаюсь добавить с помощью кода пользовательского приложения, которое должно регистрировать некоторый пакет. И все работает по этому коду:

String loggerName = "org.test";
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration cfg = ctx.getConfiguration();
if (cfg instanceof XmlConfiguration) {
       //add appender if not added
       Appender appender = cfg.getAppender(MyAppender.NAME);
if (appender == null) {
            Appender appender = MyAppender.createAppender(MyAppender.NAME, "%highlight{%d [%t] %-5level: %msg%n%throwable}", "false", null);
            appender.start();
            cfg.addAppender(appender); 
}
LoggerConfig logger = ((XmlConfiguration) cfg).getLogger(loggerName);
            if (logger == null) {
                logger = new LoggerConfig(loggerName, Level.DEBUG, true);
                cfg.addLogger(loggerName, logger);
            }
           logger.addAppender(appender, Level.DEBUG, null);
} //closing the instanceof XMLConfiguration part

Короче говоря ... как вы можете видеть, я создаю приложение, если оно не было определено ранее. Затем я создаю регистратор для org.test, если он не был добавлен, и добавляю приложение в этот регистратор.

Все в порядке, кроме одного: новый аппендер и регистратор работают правильно. Однако у меня есть другие приложения в моем приложении консоли конфигурации XML и так далее ... и по какой-то причине они ТАКЖЕ добавлены как уровень DEBUG для регистратора org.test ... даже если у этого регистратора нет НИКАКИХ других приложений, настроенных, как в моем случае .. Я отлаживаю .. у него ТОЛЬКО одно приложение в объекте конфигурации .. но регистратор по-прежнему отправляет сообщения отладки для ВСЕХ добавлений, которые у меня есть ... (я думаю, все, что у меня есть на уровне ROOT, которые были установлены на INFO ) ... с этого момента также отображаются сообщения DEBUG от org.test ... как я могу удалить это дополнение и использовать только это .. :(

Спасибо.


person JOKe    schedule 21.07.2014    source источник


Ответы (1)


Это происходит потому, что свойство логгера аддитивность имеет значение true по умолчанию. Когда это свойство имеет значение true, сообщения журнала передаются родительским средствам ведения журнала, в вашем случае, я думаю, ROOT. Установите для свойства аддитивность в регистраторе значение false, и вы получите желаемый результат. Подробнее здесь http://logging.apache.org/log4j/2.x/manual/configuration.html#Additivity.

person Priyesh    schedule 21.07.2014
comment
Вы правы .. ОДНАКО ... не полностью ... Если я изменяю XML или XML-конфигурацию и устанавливаю для Аддитивности значение false ... он работает, как ожидалось ... ОДНАКО, если я делаю это через код ... даже передавая аддитивность false. . это работает как правда .. это выглядит только с использованием XML работает .. иначе есть ошибка или что-то в этом роде - person JOKe; 30.07.2014
comment
На что вы установили «аддитивность»? - person Priyesh; 30.07.2014
comment
когда я создаю LoggerConfig или если он уже был добавлен с помощью метода setAdditivity - person JOKe; 25.09.2014