2015-01-19 3 views
0

в следующем примере кода обработчик не обращается к вызову setLevel.Java.util.logging. SetLevel не влияет на пользовательский обработчик

Logger globalLogger = Logger.getLogger(""); 

Handler handler = new LogMailHandler(); 

handler.setLevel(Level.SEVERE); 

globalLogger.addHandler(handler); 

Logger local = Logger.getLogger(LogMailHandlerTest.class.getName()); 

local.severe("Test message severe..."); 
local.info("Test message info..."); 

LogMailHandler определяется следующим образом:

public class LogMailHandler extends Handler { 
    @Override 
    public void publish(LogRecord pRecord) { 
     System.out.println("Error registered..." + pRecord.getLevel().getName()); 
    } 

    @Override 
    public void flush() { 
    } 

    @Override 
    public void close() throws SecurityException { 
    } 

} 

Выход:

Jan 19, 2015 5:20:33 PM com.idmedia.fts.exchange.helper.LogMailHandlerTest main 
SEVERE: Test message severe... 
Error registered...SEVERE 
Jan 19, 2015 5:20:33 PM com.idmedia.fts.exchange.helper.LogMailHandlerTest main 
INFO: Test message info... 
Error registered...INFO 

На мой взгляд "зарегистрирована ошибка ... INFO" не должно быть там, так как уровень обработчика был установлен в SEVERE.

Любые предложения?

ответ

1

Перед печатью на консоли вы должны протестировать LogRecord по методу публикации с помощью boolean isLoggable(LogRecord). Этот метод, среди прочего, проверяет, если уровень LogRecord выше, чем минимальный (в вашем случае SEVERE)

Смежные вопросы