logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matt Sicker <boa...@gmail.com>
Subject Re: Adding a logger with custom appender pragmatically, without using the ROOT appends for this logger, is this possible?
Date Wed, 23 Jul 2014 15:56:26 GMT
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 <ralph.goers@dslextreme.com> 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 <boards@gmail.com> 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 <remko.popma@gmail.com> 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 <gochev@gmail.com> 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 <gochev@gmail.com> 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 <boards@gmail.com> wrote:
>>>
>>>> How are you creating the appender? It might work better using a config
>>>> file.
>>>>
>>>>
>>>> On 22 July 2014 02:47, Nayden Gochev <gochev@gmail.com> 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" <boards@gmail.com> wrote:
>>>>>
>>>>>> You should specify false for additivity to prevent the automatic
>>>>>> inheritance.
>>>>>>
>>>>>>
>>>>>> On 21 July 2014 09:20, Nayden Gochev <gochev@gmail.com> 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 <boards@gmail.com>
>>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Matt Sicker <boards@gmail.com>
>>>>
>>>
>>>
>>
>
>
> --
> Matt Sicker <boards@gmail.com>
>
>
>


-- 
Matt Sicker <boards@gmail.com>

Mime
View raw message