log4j2 добавяне на logger + appender по код

Опитвам се да добавя чрез код персонализиран appender, който трябва да регистрира някакъв пакет. И всичко работи с този код:

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

И така накратко... както виждате, създавам appender, ако не е бил дефиниран appender преди. След това създавам регистратор за org.test, ако не е добавен и добавям приложението към този регистратор.

Всичко е наред с изключение на едно нещо: новият appender и logger работи правилно. Въпреки това имам други добавки в моята XML конфигурация Console Appender и т.н.. и по някаква причина те СЪЩО са добавени като ниво за ОТСТРАНЯВАНЕ на грешки за регистратора на org.test... дори ако този регистратор няма НИКАКВИ други добавки, конфигурирани като в моя случай .. Отстранявам грешки .. има САМО един appender в конфигурационния обект.. но регистраторът все още изпраща съобщения за отстраняване на грешки до ВСИЧКИ добавки, които имам... (Предполагам, че всички, които имам на ниво ROOT, които бяха зададени на INFO ) ... отсега нататък също показват DEBUG съобщения от org.test ... как мога да премахна това добавяне и да използвам само това.. :(

Благодаря.


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


Отговори (1)


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

person Priyesh    schedule 21.07.2014
comment
Вие сте прав.. ОБАЧЕ... не напълно...Ако направя XML промяна или XML конфигурация и задам Additivity на false.. работи според очакванията.. ОБАЧЕ, ако направя това чрез код.. дори да предам additivity false. .работи като вярно..изглежда само с помощта на XML работи..в противен случай има грешка или нещо подобно - person JOKe; 30.07.2014
comment
На какво настроихте "добавката"? - person Priyesh; 30.07.2014
comment
когато създавам LoggerConfig или ако вече е добавен чрез метода setAdditivity - person JOKe; 25.09.2014