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]>

Reply via email to