欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

浅析java.util.logging

程序员文章站 2022-06-07 13:36:33
...

级别

  1. SEVERE (highest value, a serious failure)

  2. WARNING (a potential problem)

  3. INFO (informational messages)

  4. CONFIG (configuration messages)

  5. FINE (tracing information)

  6. FINER (a fairly detailed tracing message)

  7. FINEST (lowest value, a highly detailed tracing message)

  8. OFF (turn off logging)

  9. ALL (enable logging of all messages)

  • Logger

对外发布的日志记录器,应用系统可以通过该对象完成日志记录的功能

  • LogRecord

日志信息描述对象

  • LogManager

单一的全局 LogManager 对象,可用于维护 Logger 和日志服务的一组共享状态

  • Level

定义日志的记录级别

  • Handler

日志处理器,接收处理LogRecord对象

  • Formatter

日志格式化转换器,在Handler处理日志时,提供格式化操作

  • Filter

日志过滤器,接口对象,在日志被 Handler 处理之前,起过滤作用

流程

//在Logger工厂(LogManager)中生成一个名为log.demo的日志管理器
Logger logDemo = Logger.getLogger("log.demo");  

// 记录一条日志级别为Level.SEVERE的日志消息
logDemo.severe("this is a severe log");    

//在Logger中,根据日志级别和日志消息,生成LogRecord对象
public void log(Level level, String msg) {
    if (!isLoggable(level)) {
        return;
    }
    LogRecord lr = new LogRecord(level, msg);
    doLog(lr);
}

//在Logger中,调用handler处理logRecord对象
for (Handler handler : loggerHandlers) {
    handler.publish(logRecord);
}

//在handler中,调用formatter格式化logRecord
msg = getFormatter().format(logRecord);

示例

Logger logger = Logger.getLogger(App.class.getName());
//构造Handler
FileHandler handler = new FileHandler("E:\\TMP\\log.xml");
//为handler设置formatter
handler.setFormatter(new SimpleFormatter());
//构造Filter
Filter filter = new Filter() {
    @Override
    public boolean isLoggable(LogRecord record) {
        if (record.getLevel().intValue() == Level.WARNING.intValue()) {
            return false;
        }
        return true;
    }
};
//为handler设置filter
handler.setFilter(filter);
//为logger设置filter
logger.setFilter(filter);
//为logger设置handler
logger.addHandler(handler);

疑问

  1. 并没有设置Handler,默认的Handler是如何被设置的?

在我们应用程序中第一次调用Logger.getLogger("log name")时,自动生成了名字为空白字符的根日志对象的。 根日志对象设置了ConsoleHandler,所以没有显示指定Handler时,其也能在控制台中输出日志消息。

转载于:https://my.oschina.net/u/3226520/blog/826508