I say not supported because that API is subject to change in 2.x releases since it's not log4j-api.
On 23 July 2014 10:46, Ralph Goers <[email protected]> wrote: > Matt, > > That isn’t quite true. What he is trying to do should work. We just want > to find a better way to do it. > > As for the code below, I don’t see the source for LogStreamAppender, but > it is never being started which will ultimately cause problems. > > Note also that if the LoggerConfig existed and had additivity = true the > code below will not be changing that to false. > > Can you create a Jira issue and attach a sample project that demonstrates > the problem? > > Ralph > > On Jul 23, 2014, at 8:30 AM, Matt Sicker <[email protected]> wrote: > > Programmatic configuration is not yet supported which is the biggest issue > here. The only "supported" way of doing it would be through creating a > hierarchy of Node objects that directly correspond to a parsed tree of an > XML or JSON config file. > > > On 23 July 2014 06:40, Remko Popma <[email protected]> wrote: > >> 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]> >>>> >>> >>> >> > > > -- > Matt Sicker <[email protected]> > > > -- Matt Sicker <[email protected]>
