[ 
https://issues.apache.org/jira/browse/LOG4J2-865?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14164061#comment-14164061
 ] 

Ralph Goers commented on LOG4J2-865:
------------------------------------

See http://logging.apache.org/log4j/2.x/manual/customconfig.html. It has an 
example where an XML configuration is used and then some additional 
configuration is programmatically added. With that approach it is just a matter 
of kicking off the reconfiguration. 

Another way to do it is to bypass XML or JSON configuration and do something 
entirely different. In that case, the easiest thing to do is to look at how 
XMLConfiguration and JSONConfiguration work - the parse the DOM tree JSON tree 
and create Node objects to represent the things that will end up being 
configured.  AbstractConfiguration will then process the Nodes and create the 
actual Appenders, Loggers, Filters, etc.

> How to change level in LoggerConfig and AppenderControl programmatically
> ------------------------------------------------------------------------
>
>                 Key: LOG4J2-865
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-865
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Appenders, Configurators
>    Affects Versions: 2.0.2
>         Environment: Windows7 64bit, Eclipse, Maven
>            Reporter: Andrew Herr
>             Fix For: 2.0.2
>
>
> I am wrapping log4j2 in order to replace the logging backend used in house, 
> so I am configuring the logger and appenders at runtime with calls to the 
> Context, Configuration, and LoggerConfig. I'd like to change the log level on 
> the fly, so I get the LoggerConfig for my named logger and call 
> setLevel(Level) on it, and then updateLoggers in the context. New messages at 
> the new (less severe) level are not logged. Through a debug session, I can 
> see that the level in LoggerConfig is correctly updated, but the 
> AppenderControl still has the old level, so callAppenders denies my event 
> from being logged.
> Code:
> Set up the logger + RollingFileAppender
>         name = logName;
>         level = logLevel;
>         LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
>         Configuration config = ctx.getConfiguration();
>         
>         LoggerConfig loggerConfig = new LoggerConfig(name, level, false);
>         PatternLayout layout = 
> PatternLayout.createLayout(PatternLayout.SIMPLE_CONVERSION_PATTERN, config, 
> null, null, true, false, null, null);
>         
>         OnStartupTriggeringPolicy startupTrigger = 
> OnStartupTriggeringPolicy.createPolicy();
>         SizeBasedTriggeringPolicy sizeTrigger = 
> SizeBasedTriggeringPolicy.createPolicy("25MB");
>         TriggeringPolicy triggerPolicy = 
> CompositeTriggeringPolicy.createPolicy(startupTrigger, sizeTrigger);
>         DefaultRolloverStrategy rolloverStrategy = 
> DefaultRolloverStrategy.createStrategy("5", "1", "min", null, config);
>         RollingFileAppender rollingFileAppender = 
> RollingFileAppender.createAppender(name + ".log", name + ".log.%i", "true", 
> "RollingFile",
>                 "true", "8192", "true", triggerPolicy, rolloverStrategy, 
> layout, null, "true", "false", null, config);
>         rollingFileAppender.start();
>         loggerConfig.addAppender(rollingFileAppender, level, null);
>         config.addLogger(name, loggerConfig);
>         ctx.updateLoggers();
> update the level:
>         LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
>         Configuration config = ctx.getConfiguration();
>         LoggerConfig loggerConfig = config.getLoggerConfig(name);
>         loggerConfig.setLevel(logLevel);
>         ctx.updateLoggers();



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to