从源码与官方文档看之Handle篇(三)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 我们继续看看源码,来一步步去深入Handle,去熟悉那些我们平时用得到和用不到的属性与特点。结合到我们开发工作中,看看我们取用了它哪些好用的地方。

正篇

我们首先继续去从官方注释和属性去看看:

Default constructor. The resulting Handler has a log level of Level.ALL, no Formatter, and no Filter. A default ErrorManager instance is installed as the ErrorManager.
protected Handler() {
}

我们可以直接发现这个是Handle类的默认构造方法,不过注释标明了它的一些属性和特点:生成的 Handler 的日志级别为 Level.ALL,没有 Formatter,也没有 Filter。 默认的 ErrorManager 实例部署实现为 ErrorManager。 接下来publish方法:

/**
 * Publish a <tt>LogRecord</tt>.
 * <p>
 * The logging request was made initially to a <tt>Logger</tt> object,
 * which initialized the <tt>LogRecord</tt> and forwarded it here.
 * <p>
 * The <tt>Handler</tt>  is responsible for formatting the message, when and
 * if necessary.  The formatting should include localization.
 *
 * @param  record  description of the log event. A null record is
 *                 silently ignored and is not published
 */
public abstract void publish(LogRecord record);

根据注释来看,这个方法是用来发布一个日志记录的,原理是日志记录请求最初是对 Logger 对象发出的,将该对象初始化为 LogRecord 并将其转发到此处。需要注意的是Handle负责在必要时对消息进行格式化。 格式应包括本地化。而这个方法的参数要求是:这是一个日志事件的描述,如果是空记录则被静默忽略且不发布。

接着是flush方法:

/**
 * Flush any buffered output.
 */
public abstract void flush();

注释是说这个方法可以刷新任何缓冲的输出。所以应该是一个刷新缓冲的方法。 然后还有close方法:

/**
 * Close the <tt>Handler</tt> and free all associated resources.
 * <p>
 * The close method will perform a <tt>flush</tt> and then close the
 * <tt>Handler</tt>.   After close has been called this <tt>Handler</tt>
 * should no longer be used.  Method calls may either be silently
 * ignored or may throw runtime exceptions.
 *
 * @exception  SecurityException  if a security manager exists and if
 *             the caller does not have <tt>LoggingPermission("control")</tt>.
 */
public abstract void close() throws SecurityException;

这是用来关闭 Handler 并释放所有相关资源的方法。close 方法会执行刷新,然后结束Handler。 调用 close() 后,不应再使用Handle类再处理其他活动。 方法调用可能会被静默忽略,也可能会引发运行时异常,抛出异常为SecurityException(如果存在安全管理器并且调用者没有用 LoggingPermission("control"))。

(未完待续)

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
监控
从源码与官方文档看之Handle篇(一)
之前的文章实在太肤浅,写出来其实很多都没有太大帮助,所以我们另起一个系列“从源码与官方文档看”。
110 0
从源码与官方文档看之Handler篇(七)
接下来就是我们可以正常调用的Handler类方法了,希望早日完成Handler类的源码阅读。
|
安全 API 调度
从源码与官方文档看之Handler篇(十)
每次阅读源码,我都想着许多过往云烟,可以说,一切不在一样,不过,想再多又如何,倒不如按下心思,在手中记下这一切更为妥当。还是看看这些充满智慧结晶的源码吧!
105 0
|
安全 Android开发
从源码与官方文档看之Handle篇(四)
今天的工作挺忙的,又要接接口,又要修Bug,还要完成需求。晚上家里又有一些事情忙活,所以我们废话不多说,直接进正题。
115 0
|
安全
从源码与官方文档看之Handle篇(二)
上一篇我们根据官方注释解读Handle的一些基本属性,这一篇我们接着慢慢阐述。
|
安全 API
从源码与官方文档看之Handler篇(六)
今天继续看Handler类,构造方法已经基本全部看完,后面应该是一些类的一般方法之类的内容了,继续加油。
121 0
从源码与官方文档看之Handler篇(五)
尽管前路坎坷,可我们还是继续走了下去,一转眼已经又到了第五篇了,每篇内容较少,所以后面整理完时,会汇总成一篇文章,相信这样做会更具有可读性。
|
Java Android开发
从源码与官方文档看之Handler篇(二)
今天又发现自己原来是Handler这个类名打错了导致前面几篇一直再说Java的Handle,而安卓的是Handler,前一篇文章我们主要翻译了安卓官方对Handler的注释,这一篇我们来看看Handler类的一些属性,成员变量。
|
安全
从源码与官方文档看之Handler篇(四)
上回我们说到第一个Handler类的含有控制是否异步执行的构造函数,今天我们继续往下阅读,相信能更清楚的了解Handler类的机制。
|
消息中间件 Android开发
从源码与官方文档看之Handler篇(九)
今天我们来详细看看Handler的post()方法吧
112 0