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

Reply via email to