java.util.logging中。 SetLevel对自定义处理程序没有影响

时间:2015-01-19 16:22:50

标签: java 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 个答案:

答案 0 :(得分:1)

在控制台上打印之前,必须使用boolean isLoggable(LogRecord)在发布方法上测试LogRecord。除其他外,此方法测试LogRecord级别是否高于最小值(在您的情况下为SEVERE)