You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by Phil Wray <ph...@db.com> on 2014/06/25 09:19:02 UTC

Re: how to change logging level for a class at runtime [I]

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 <rg...@apache.org>
To:
Log4J Users List <lo...@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 <ph...@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" <lo...@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" <lo...@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 <ra...@dslextreme.com>
> To:
> Log4J Users List <lo...@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 <ph...@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-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@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.

Re: how to change logging level for a class at runtime [I]

Posted by Phil Wray <ph...@db.com>.
Classification: For internal use only

LoggerConfigAdmin mbean instances only exist for explicitly configured 
loggers - so you can only change the level for loggers originally defined 
in your config file - not for an arbitrary class or package - which I've 
found a useful feature.


I've updated the jira with a patch file and 2 new classes - 
LoggerLevelAdmin and LoggerLevelAdminMBean.
Server changed to register a single LoggerLevelAdmin mbean that allows you 
to dynamically change level for any logger - creating a new loggerConfig 
item if necessary.
If someone could take a look at them would be great.


thanks,
Phil

Phil Wray
Developer

Deutsche Bank AG, Filiale London
Global Technology
20 Finsbury Circus, EC2M 1NB London, United Kingdom
Tel. +44(20)7547 4918
Mobile +44 (0)7815 780246
Email phil.wray@db.com




From:
Matt Sicker <bo...@gmail.com>
To:
Log4J Users List <lo...@logging.apache.org>, 
Date:
09/08/2014 02:35
Subject:
Re: how to change logging level for a class at runtime [I]



Is this not what you're looking for?

http://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/jmx/LoggerConfigAdminMBean.html



On 6 August 2014 22:44, Matt Sicker <bo...@gmail.com> wrote:

> I may take a look at this soon as I've been getting into JMX lately at
> work in order to automate some build/deployment infrastructure. It's 
still
> fresh ;)
>
>
> On 6 August 2014 17:42, Ralph Goers <ra...@dslextreme.com> wrote:
>
>> I wouldn?t have asked for a patch submission if I didn?t plan to 
consider
>> it. That said, we are all volunteers here and sometimes don?t get to 
things
>> as quickly as we would like.
>>
>> Ralph
>>
>> On Aug 6, 2014, at 1:24 PM, Ang Xu <ax...@linkedin.com.INVALID> wrote:
>>
>> > 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" <ph...@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 <rg...@apache.org>
>> >> To:
>> >> Log4J Users List <lo...@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 <ph...@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" <lo...@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" <lo...@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 <ra...@dslextreme.com>
>> >>> To:
>> >>> Log4J Users List <lo...@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 <ph...@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-unsubscribe@logging.apache.org
>> >> For additional commands, e-mail: log4j-user-help@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-unsubscribe@logging.apache.org
>> > For additional commands, e-mail: log4j-user-help@logging.apache.org
>> >
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>> For additional commands, e-mail: log4j-user-help@logging.apache.org
>>
>>
>
>
> --
> Matt Sicker <bo...@gmail.com>
>



-- 
Matt Sicker <bo...@gmail.com>






---

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.

Re: how to change logging level for a class at runtime [I]

Posted by Matt Sicker <bo...@gmail.com>.
Is this not what you're looking for?

http://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/jmx/LoggerConfigAdminMBean.html


On 6 August 2014 22:44, Matt Sicker <bo...@gmail.com> wrote:

> I may take a look at this soon as I've been getting into JMX lately at
> work in order to automate some build/deployment infrastructure. It's still
> fresh ;)
>
>
> On 6 August 2014 17:42, Ralph Goers <ra...@dslextreme.com> wrote:
>
>> I wouldn’t have asked for a patch submission if I didn’t plan to consider
>> it. That said, we are all volunteers here and sometimes don’t get to things
>> as quickly as we would like.
>>
>> Ralph
>>
>> On Aug 6, 2014, at 1:24 PM, Ang Xu <ax...@linkedin.com.INVALID> wrote:
>>
>> > 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" <ph...@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 <rg...@apache.org>
>> >> To:
>> >> Log4J Users List <lo...@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 <ph...@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" <lo...@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" <lo...@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 <ra...@dslextreme.com>
>> >>> To:
>> >>> Log4J Users List <lo...@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 <ph...@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-unsubscribe@logging.apache.org
>> >> For additional commands, e-mail: log4j-user-help@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-unsubscribe@logging.apache.org
>> > For additional commands, e-mail: log4j-user-help@logging.apache.org
>> >
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>> For additional commands, e-mail: log4j-user-help@logging.apache.org
>>
>>
>
>
> --
> Matt Sicker <bo...@gmail.com>
>



-- 
Matt Sicker <bo...@gmail.com>

Re: how to change logging level for a class at runtime [I]

Posted by Matt Sicker <bo...@gmail.com>.
I may take a look at this soon as I've been getting into JMX lately at work
in order to automate some build/deployment infrastructure. It's still fresh
;)


On 6 August 2014 17:42, Ralph Goers <ra...@dslextreme.com> wrote:

> I wouldn’t have asked for a patch submission if I didn’t plan to consider
> it. That said, we are all volunteers here and sometimes don’t get to things
> as quickly as we would like.
>
> Ralph
>
> On Aug 6, 2014, at 1:24 PM, Ang Xu <ax...@linkedin.com.INVALID> wrote:
>
> > 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" <ph...@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 <rg...@apache.org>
> >> To:
> >> Log4J Users List <lo...@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 <ph...@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" <lo...@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" <lo...@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 <ra...@dslextreme.com>
> >>> To:
> >>> Log4J Users List <lo...@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 <ph...@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-unsubscribe@logging.apache.org
> >> For additional commands, e-mail: log4j-user-help@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-unsubscribe@logging.apache.org
> > For additional commands, e-mail: log4j-user-help@logging.apache.org
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
>
>


-- 
Matt Sicker <bo...@gmail.com>

Re: how to change logging level for a class at runtime [I]

Posted by Ralph Goers <ra...@dslextreme.com>.
I wouldn’t have asked for a patch submission if I didn’t plan to consider it. That said, we are all volunteers here and sometimes don’t get to things as quickly as we would like.

Ralph

On Aug 6, 2014, at 1:24 PM, Ang Xu <ax...@linkedin.com.INVALID> wrote:

> 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" <ph...@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 <rg...@apache.org>
>> To:
>> Log4J Users List <lo...@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 <ph...@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" <lo...@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" <lo...@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 <ra...@dslextreme.com>
>>> To:
>>> Log4J Users List <lo...@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 <ph...@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-unsubscribe@logging.apache.org
>> For additional commands, e-mail: log4j-user-help@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-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
> 


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


Re: how to change logging level for a class at runtime [I]

Posted by Ang Xu <ax...@linkedin.com.INVALID>.
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" <ph...@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 <rg...@apache.org>
>To:
>Log4J Users List <lo...@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 <ph...@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" <lo...@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" <lo...@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 <ra...@dslextreme.com>
>> To:
>> Log4J Users List <lo...@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 <ph...@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-unsubscribe@logging.apache.org
>For additional commands, e-mail: log4j-user-help@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-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org