Hi,

Is there any plan to merge this patch to the main branch? This
functionality seems extremely useful when modifying config file is not an
option.

Thanks,
Ang

On 6/25/14, 12:19 AM, "Phil Wray" <phil.w...@db.com> wrote:

>Classification: For internal use only
>
>Hey Ralph.
>Sure - have created:
>LOG4J2-681 Add ability to change log level for any class/package
>dynamically via jmx
>
>cheers,
>Phil
>
>
>
>
>
>From:
>Ralph Goers <rgo...@apache.org>
>To:
>Log4J Users List <log4j-user@logging.apache.org>,
>Date:
>24/06/2014 15:34
>Subject:
>Re: how to change logging level for a class at runtime
>
>
>
>Phil,
>
>That looks pretty good.  It would be great if you could create a Jira
>issue and add that as a patch
>
>Sent from my iPad
>
>> On Jun 24, 2014, at 7:01 AM, Phil Wray <phil.w...@db.com> wrote:
>> 
>> Classification: Public
>> 
>> Hi Ralph,
>> Just to confirm running latest trunk version its possible to change
>levels 
>> at runtime using code as per your docs.
>> Thanks for the help.
>> I see a tag for 2.0-rc2 was taken a couple of days ago - I'm guessing
>this 
>> is being released imminently?
>> 
>> In case it helps others I ended up with the following util to let us
>> change levels via jmx, just using whatever existing appender the logger
>> would have had.
>> 
>>        @ManagedOperation
>>        public String changeLogLevel(String loggerName, String level){
>>                Level newLevel = Level.toLevel(level);
>>                LoggerContext ctx = (LoggerContext)
>LogManager.getContext(
>> false);
>>                Configuration config = ctx.getConfiguration();
>>                LoggerConfig loggerConfig =
>> config.getLoggerConfig(loggerName);
>>                String msg;
>> 
>>                if (loggerName.equals(loggerConfig.getName())){
>>                        Level oldLevel = loggerConfig.getLevel();
>>                        loggerConfig.setLevel(newLevel);
>>                        msg = String.format("Modified existing logger %s
>> level from %s to %s", loggerName, oldLevel, newLevel);
>>                } else {
>>                        createCopyFrom(loggerConfig, loggerName,
>newLevel, 
>> config);
>>                        msg = String.format("Added new logger %s with
>> level %s previously used logger %s with level %s", loggerName,
>>newLevel, 
>
>> loggerConfig.getName(), loggerConfig.getLevel());
>>                }
>>                ctx.updateLoggers();
>>                LOG.info(msg);
>>                return msg;
>>        }
>> 
>>        private void createCopyFrom(LoggerConfig original, String name,
>> Level level, Configuration config){
>>                AppenderRef[] refs = original.getAppenderRefs().toArray(
>> new AppenderRef[]{});
>>                Filter filter = original.getFilter();
>>                LoggerConfig copy = LoggerConfig.createLogger(
>>                                "false",
>>                                level,
>>                                name,
>>                                Boolean.toString
>> (original.isIncludeLocation()),
>>                                refs, null, config, filter);
>> 
>>                for (Appender appender :
>> original.getAppenders().values()){
>>                        copy.addAppender(appender, null, null);
>>                }
>>                config.addLogger(name, copy);
>>        }
>> 
>> cheers,
>> Phil
>> 
>> 
>> 
>> 
>> From:
>> Phil Wray/ext/dbcom
>> To:
>> "Log4J Users List" <log4j-user@logging.apache.org>,
>> Date:
>> 24/06/2014 11:16
>> Subject:
>> Re: how to change logging level for a class at runtime
>> 
>> 
>> Classification: Public
>> 
>> Hi Ralph,
>> Sorry hadn't looked at the latest source  - see you've made changes to
>> Configuration to allow adding of LoggerConfig via the interface that
>>are 
>
>> not yet in the release candidate jar.
>> I'll take the latest source and build from that.
>> 
>> 
>> thanks,
>> Phil
>> 
>> 
>> 
>> 
>> 
>> 
>> From:
>> Phil Wray/ext/dbcom
>> To:
>> "Log4J Users List" <log4j-user@logging.apache.org>,
>> Date:
>> 24/06/2014 09:07
>> Subject:
>> Re: how to change logging level for a class at runtime
>> 
>> 
>> Classification: Public
>> 
>> Hi Ralph,
>> Thanks for getting back, but the examples do not show how to change
>levels 
>> at runtime,
>> 
>> There is no method addLogger(String, LoggerConfig) method on the
>> Configuration interface.
>> The addLogger method exists on BaseConfiguration, however it throws an
>> IllegalStateException as its already started, and says you have to
>create 
>> a new configuration.
>> 
>> Is it actually possible to change the logging level for a class/package
>at 
>> runtime after startup?
>> I think this is a common use case for troubleshooting critical long
>> running processes.
>> 
>> 
>> thanks,
>> Phil
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> From:
>> Ralph Goers <ralph.go...@dslextreme.com>
>> To:
>> Log4J Users List <log4j-user@logging.apache.org>,
>> Date:
>> 23/06/2014 15:57
>> Subject:
>> Re: how to change logging level for a class at runtime
>> 
>> 
>> 
>> Please see 
>> http://people.apache.org/~rgoers/log4j2/manual/customconfig.html
>> 
>> Ralph
>> 
>>> On Jun 23, 2014, at 3:44 AM, Phil Wray <phil.w...@db.com> wrote:
>>> 
>>> Classification: Public
>>> 
>>> Hi,
>>> Would like to turn on debug for a particular class or package at
>> runtime, 
>>> either via jmx or programmatically, where this class or package is
>>> arbitrary and not known at start up time please.
>>> I can't see a way to do this?
>>> Previous posts titled "Programmatic configuration of loggers" show how
>> to 
>>> do this for an existing named logger but not for an arbitrary class or
>>> package which is a typical use case.
>>> LoggerConfig loggerConfig = config.getLoggerConfig(loggerName);
>>> 
>>> But this returns the root logger if no existing logger for that name
>>> exists - and we can't just enable debug on everything.
>>> Is there a way of adding a new LoggerConfig into the configuration?
>>> 
>>> thanks,
>>> Phil Wray
>>> 
>>> 
>>> 
>>> 
>>> ---
>>> 
>>> This e-mail may contain confidential and/or privileged information. If
>> you are not the intended recipient (or have received this e-mail in
>error) 
>> please notify the sender immediately and delete this e-mail. Any
>> unauthorized copying, disclosure or distribution of the material in
>>this 
>
>> e-mail is strictly forbidden.
>>> 
>>> Please refer to http://www.db.com/en/content/eu_disclosures.htm for
>> additional EU corporate and regulatory disclosures and to
>> http://www.db.com/unitedkingdom/content/privacy.htm for information
>about 
>> privacy.
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> ---
>> 
>> This e-mail may contain confidential and/or privileged information. If
>you are not the intended recipient (or have received this e-mail in
>error) 
>please notify the sender immediately and delete this e-mail. Any
>unauthorized copying, disclosure or distribution of the material in this
>e-mail is strictly forbidden.
>> 
>> Please refer to http://www.db.com/en/content/eu_disclosures.htm for
>additional EU corporate and regulatory disclosures and to
>http://www.db.com/unitedkingdom/content/privacy.htm for information about
>privacy.
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
>For additional commands, e-mail: log4j-user-h...@logging.apache.org
>
>
>
>
>
>
>
>---
>
>This e-mail may contain confidential and/or privileged information. If
>you are not the intended recipient (or have received this e-mail in
>error) please notify the sender immediately and delete this e-mail. Any
>unauthorized copying, disclosure or distribution of the material in this
>e-mail is strictly forbidden.
>
>Please refer to http://www.db.com/en/content/eu_disclosures.htm for
>additional EU corporate and regulatory disclosures and to
>http://www.db.com/unitedkingdom/content/privacy.htm for information about
>privacy.


---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-user-h...@logging.apache.org

Reply via email to