[logback-user] TRACE messages get through even at DEBUG Level

Ceki Gulcu ceki at qos.ch
Tue Feb 24 10:37:36 CET 2009


The problem is caused by the fact that the localLevelReset method in the Logger 
class inadvertently uses the DEBUG_INT value in the 
org.slf4j.spi.LocationAwareLogger interface instead of the DEBUG_INT value in 
ch.qos.logback.classic.Level class.

I will commit a fix in a few minutes.

Ceki Gulcu wrote:
> 
> 
> Andy,
> 
> Thank you for your message. I think the following test reproduces the 
> bug you have encountered.
> 
>   @Test
>   public void levelResetTest() {
>     LoggerContext loggerContext = new LoggerContext();
> 
>     Logger root = loggerContext.getLogger(LoggerContext.ROOT_NAME);
>     root.setLevel(Level.TRACE);
>     assertTrue(root.isTraceEnabled());
>     loggerContext.reset();
>     assertFalse(root.isTraceEnabled());  <-- assertion fails
>     assertTrue(root.isDebugEnabled());
>   }
> 
> If so, could you please enter a jira issue at http://jira.qos.ch   ? 
> Many thanks in advance,
> 
> Andy Ruch wrote:
>> Hello,
>>
>> I'm using SLF4J 1.5.6 and Logback 0.9.15.
>>
>> I'm wanting to reconfigure Logback in my code, but I think I've found 
>> a bug. I've copied the following code from the documentation for how 
>> to reconfigure Logback.
>>
>> // assume SLF4J is bound to logback in the current environment
>> LoggerContext lc = ( LoggerContext ) LoggerFactory.getILoggerFactory();
>>
>> try {
>>     JoranConfigurator configurator = new JoranConfigurator();
>>     configurator.setContext( lc );
>>     // the context was probably already configured by default 
>> configuration
>>     // rules
>>     lc.reset();
>>     configurator.doConfigure( url );
>> }
>> catch ( JoranException je ) {
>>     je.printStackTrace();
>> }
>> StatusPrinter.printInCaseOfErrorsOrWarnings( lc );
>>
>>
>> This works fine, except for when my new root logger level is DEBUG. If 
>> that is the case, 
>  > I receive trace messages also. I have tracked the issue down to
>  > ch.qos.logback.classic.Logger. When localLevelReset() is called, the
>  > effectiveLevelInt is set to DEBUG_INT = 10. If it is the root logger,
>  > the level is also set to DEBUG. When the logger is being reconfigured,
>> setLevel() is called with newLevel = DEBUG. Because level == newLevel, 
>  > nothing happens and the method returns. However, effectiveLevelInt is 
> never
>  > being set to ch.qos.logback.classic.Level.DEBUG_INT = 10000. When a 
> TRACE log
>  > message is then evaluated, it is sent through because the 
> effectiveLevelInt is still 10,
>  > even though Level should be DEBUG.
> 

-- 
Ceki Gülcü
Logback: The reliable, generic, fast and flexible logging framework for Java.
http://logback.qos.ch


More information about the Logback-user mailing list