One thing you can try is in your log4j2.xml, add a threshold filter that accepts INFO to the console appender. For an example, see http://logging.apache.org/log4j/2.x/manual/filters.html#ThresholdFilter
Sent from my iPhone > On 2014/07/23, at 16:27, Nayden Gochev <[email protected]> wrote: > > Matt, > so you are right.. if I do a XML configuration and make additivity= false and > register my logger with appenderRef there.. everything works as expected.. > the ROOT appenders are not used. > However.. when I do it via code ( the one I send in the previous mail ) the > root appenders are working... > Do I do something wrong abotu creation ? > or is there some difference in how updateLoggers(cfg) works compared to after > parsing the log4j2.xml and again updating loggers ? > > Thanks, > Nayden > > >> On Wed, Jul 23, 2014 at 9:55 AM, Nayden Gochev <[email protected]> wrote: >> Hello Matt, >> the problem is that I want to create the appender and the logger together >> via code. >> So the appender or the logger are not mentioned in the log4j2.xml file >> >> I am creating the appender via the createAppender factory method but in the >> code. >> Full code for enable the logger + appender I use is this : >> if (enable) { >> final LoggerContext ctx = (LoggerContext) >> LogManager.getContext(false); >> Configuration cfg = ctx.getConfiguration(); >> if (cfg instanceof XmlConfiguration) { >> //add appender if not added >> Appender appender = cfg.getAppender(LogStreamAppender.NAME); >> if (appender == null) { >> appender = >> LogStreamAppender.createAppender(LogStreamAppender.NAME, "%highlight{%d [%t] >> %-5level: %msg%n%throwable}", "false", null); >> cfg.addAppender(appender); >> } >> //add logger if not added >> LoggerConfig logger = ((XmlConfiguration) >> cfg).getLogger(loggerName); >> if (logger == null) { >> logger = new LoggerConfig(loggerName, Level.DEBUG, >> false); >> cfg.addLogger(loggerName, logger); >> } else { >> logger.setLevel(Level.DEBUG); >> } >> logger.addAppender(appender, Level.DEBUG, null); >> ctx.updateLoggers(cfg); >> } >> } >> >> The problem is that indeed this LogStreamAppender is receiving everything >> correctly. However in the log4j2.xml I have several other appenders added at >> the ROOT log. >> <Appenders> >> <Console name="CONSOLE" target="SYSTEM_OUT"> >> <PatternLayout pattern="%highlight{%d [%t] %-5level: >> %msg%n%throwable}" /> >> </Console> >> ..... >> </Appenders> >> <Root level="info"> >> <AppenderRef ref="CONSOLE"/> >> >> .... >> </Root> >> >> All of which .. start automatically receive my Stream log ... which is what >> I don't want to happen :( >> So even if I pass additivity to false... the root appenders (which were info >> but are now as it looks are debug for this package (loggerName)) are still >> receiving the messages >> >> Regards, >> Nayden >> >> >> >>> On Tue, Jul 22, 2014 at 10:35 PM, Matt Sicker <[email protected]> wrote: >>> How are you creating the appender? It might work better using a config file. >>> >>> >>>> On 22 July 2014 02:47, Nayden Gochev <[email protected]> wrote: >>>> Hello Matt, >>>> >>>> this sounds great however it doesn't work. >>>> >>>> Maybe it is a bug ? >>>> >>>> what I do is : >>>> >>>> final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); >>>> >>>> Configuration cfg = ctx.getConfiguration(); >>>> >>>> if (cfg instanceof XmlConfiguration) { >>>> >>>> //add logger if not added >>>> >>>> LoggerConfig logger = ((XmlConfiguration) >>>> cfg).getLogger(loggerName); >>>> >>>> if (logger == null) { >>>> >>>> logger = new LoggerConfig(loggerName, Level.DEBUG, >>>> false); //here this false is for the additive >>>> >>>> cfg.addLogger(loggerName, logger); >>>> >>>> } else { //change the level leave it as it is >>>> >>>> logger.setLevel(Level.DEBUG); >>>> >>>> } >>>> >>>> logger.addAppender(newAppender, Level.DEBUG, null); >>>> >>>> ctx.updateLoggers(cfg); >>>> >>>> } >>>> >>>> >>>> >>>> Still .. all root loggers also receive the log message(s) together with >>>> this new appender that is passed here. >>>> >>>> I am using 2.0 final >>>> >>>> >>>> >>>>> On Jul 21, 2014 5:32 PM, "Matt Sicker" <[email protected]> wrote: >>>>> You should specify false for additivity to prevent the automatic >>>>> inheritance. >>>>> >>>>> >>>>>> On 21 July 2014 09:20, Nayden Gochev <[email protected]> wrote: >>>>>> In short: >>>>>> I am trying to add a custom appender + logger for some package for >>>>>> example "org.test" >>>>>> However the root appenders (appender refs) are always added as well >>>>>> automatically.. so even if I have a root appender(s) with level INFO >>>>>> defined in the log4j2.xml, >>>>>> ones I add a logger with level DEBUG.. with a new appender (only 1) .. >>>>>> the 2 root appenders that I have defined in the XML automatically starts >>>>>> receiving this DEBUG messages as well. >>>>>> >>>>>> Is it possible somehow to REMOVE this ROOT appends.. from my newly >>>>>> created logger ? >>>>>> newLoggerConfig.getAppenderRefs().clear(); doesn't work of course :) >>>>>> >>>>>> Thanks for the help, >>>>>> much appreciated. >>>>> >>>>> >>>>> >>>>> -- >>>>> Matt Sicker <[email protected]> >>> >>> >>> >>> -- >>> Matt Sicker <[email protected]> >
