logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sharma, Siddharth" <Siddharth.Sha...@Staples.com>
Subject RE: Programmatic threshold change
Date Wed, 12 Jul 2006 18:26:12 GMT

I did what you recommended and it worked perfectly.
Thanks a bunch.

Except when I added the hierarchy wide threshold to log4j.xml as INFO (in
caps), it started printing the following warnings in the log (but bizarrely
it worked as expected):

log4j:WARN Continuable parsing error 12 and column 100
log4j:WARN Attribute "threshold" with value "INFO" must have a value from
the list "all debug info warn error fatal off null ".

When I changed it to 'info' (lower case), the warnings disappeared and it
continued to work as expected.

Thanks for your help

-----Original Message-----
From: Curt Arnold [mailto:carnold@apache.org] 
Sent: Wednesday, July 12, 2006 1:47 PM
To: Log4J Users List
Subject: Re: Programmatic threshold change

On Jul 12, 2006, at 12:20 PM, Sharma, Siddharth wrote:

> Greetings
> In log4j.xml, we have set the threshold to be 'INFO'.
> We have written a servlet that takes the log level as a parameter and
> dynamically changes log4j's log level.
> This is to facilitate bumping the log level up on-demand when an  
> exception
> occurs to capture more information.
> Here is the code:
> LoggerRepository logRepository = LogManager.getLoggerRepository();
> logRepository.setThreshold(someLogLevel);
> But I find that the log4j does not get configured at runtime to log  
> at a
> level lower than what is defined in log4j.xml.
> In other words, I can successfully change to WARN, ERROR or FATAL  
> and then
> back down to INFO, but I cannot change it to DEBUG (since log4j.xml  
> has
> INFO).
> I am hoping this is possible to do and will appreciate the code  
> that will
> achieve this.
> I can certainly change log4j.xml to have a threshold of DEBUG and then
> programmatically change it to INFO during server startup. But I'd  
> rather not
> do it that way since it is a HACK!
> Thanks in advance
> Sid

Your code is changing the hierarchy-wide threshold.  It is likely  
that you configuration file is setting the logger thresholds.   The  
level of a logging request must be the same or higher than both the  
hierarchy-wide threshold and appropriate logger threshold  before a  
logging event is accepted.

The logger hierarchy threshold (what your code is change) is set in a  
XML configuration file like:

<log4j:configuration threshold="INFO">

  While a logger threshold (which you aren't modifying in your code)  
if set like:

     <level value="INFO"/>


<logger name="org.example.foobar">
	<level value="INFO"/>
What I would recommend is to change your configuration file so that  
the hierarchy-wide threshold is set to INFO and any logger-specific  
threshold is set to a lower level.  Until your hierarchy-wide  
threshold changing code is executed, any request below the hierarchy- 
wide threshold is discarded regardless of the logger-specific  
thresholds.  Only when the hierarchy-wide threshold is lowered, would  
the logger-specific thresholds come into play.

If you still have questions, please provide relevant parts of your  
log4j.xml file.

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

View raw message