从源码与官方文档看之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"))。

(未完待续)

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
7月前
|
数据采集 XML JavaScript
Python爬虫:从人民网提取视频链接的完整指南
Python爬虫:从人民网提取视频链接的完整指南
|
11月前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
494 3
|
负载均衡 Linux 调度
NO_HZ: 降低调度时钟中断 【ChatGPT】
NO_HZ: 降低调度时钟中断 【ChatGPT】
|
存储 监控 安全
|
11月前
|
安全 Java Linux
如何确定 Broken Pipe 异常是由网络问题还是其他原因引起的
Broken Pipe 异常可能由网络问题或其他原因引起。要确定具体原因,可以检查网络连接状态、防火墙设置和系统日志,同时分析异常发生时的上下文信息。
1439 5
|
Prometheus 数据可视化 Cloud Native
构建交互式的 Grafana 仪表盘
【8月更文第29天】Grafana 是一个功能强大的数据可视化工具,它支持多种数据源并能够创建高度定制化的仪表盘。通过使用交互式面板,用户可以更直观地探索数据并进行数据分析。本文将介绍如何设计和实现用户友好的交互式面板,以提高数据分析效率,并提供具体的代码示例。
878 2
|
数据采集 JavaScript 前端开发
Puppeteer-py:Python 中的无头浏览器自动化
Puppeteer-py:Python 中的无头浏览器自动化
|
SQL 消息中间件 关系型数据库
使用FLINK SQL从savepoint恢复hudi作业 (flink 1.13)
Flink从1.13版本开始支持在SQL Client从savepoint恢复作业,本文介绍如何在flink sql client中恢复flink作业。
使用FLINK SQL从savepoint恢复hudi作业 (flink 1.13)
|
Web App开发 JavaScript 前端开发
从浏览器原理出发聊聊Chrome插件
本文从浏览器架构演进、插件运行机制、插件基本介绍和一些常见的插件实现思路几个方向聊聊Chrome插件。
|
机器学习/深度学习 语音技术
“Zero-shot Learning”、“One-shot Learning”和“Few-shot Learning”
你知道吗?在机器学习的世界里,有一种名为“Zero-shot Learning”、“One-shot Learning”和“Few-shot Learning”的策略,它们主要是为了解决神经网络模型因为训练数据少,导致模型泛化能力差的问题。
505 1