Well, you can say that about everything in core.  Clearly there is some stuff 
in core that we are going to carefully consider the impact to users before we 
allow it to change. And saying “not supported” is much different that saying 
“we may not maintain binary compatibility”.

Ralph

On Jul 23, 2014, at 8:56 AM, Matt Sicker <[email protected]> wrote:

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

Reply via email to