Documentation Home
MySQL 8.0 参考手册  / 第 5 章 MySQL 服务器管理  / 5.4 MySQL 服务器日志  / 5.4.2 错误日志  /  5.4.2.5 基于优先级的错误日志过滤(log_filter_internal)

5.4.2.5 基于优先级的错误日志过滤(log_filter_internal)

log_filter_internal日志过滤器组件实现了一种基于错误事件优先级和错误代码的简单形式的日志过滤 。要影响 log_filter_internal允许或禁止错误、警告和信息事件的方式用于错误日志,请设置 log_error_verbositylog_error_suppression_list 系统变量。

log_filter_internal内置并默认启用。如果此过滤器被禁用 log_error_verbosity并且 log_error_suppression_list没有效果,则必须在需要时使用另一个过滤器服务而不是执行过滤(例如,使用时使用单独的过滤器规则log_filter_dragnet)。有关过滤器配置的信息,请参阅 第 5.4.2.1 节,“错误日志配置”

详细过滤

用于错误日志的事件的优先级为 ERRORWARNINGINFORMATION。系统变量根据 log_error_verbosity允许写入日志的消息的优先级来控制详细程度,如下表所示。

log_error_verbosity 值 允许的消息优先级
1个 ERROR
2个 ERROR,WARNING
3个 ERROR, WARNING, INFORMATION

如果log_error_verbosity是 2 或更大,则服务器记录有关对基于语句的日志记录不安全的语句的消息。如果值为 3,则服务器会记录中止的连接和新连接尝试的拒绝访问错误。请参阅 第 B.3.2.9 节,“通信错误和中止连接”

如果您使用复制, log_error_verbosity建议使用 2 或更大的值,以获取有关正在发生的事情的更多信息,例如有关网络故障和重新连接的消息。

如果log_error_verbosity在副本上为 2 或更大,则副本将消息打印到错误日志以提供有关其状态的信息,例如二进制日志和中继日志坐标它开始其作业的位置,切换到另一个中继日志的时间,当它断开连接后重新连接,等等。

还有一个SYSTEM 不受冗长过滤限制的消息优先级。无论值如何,有关非错误情况的系统消息都会打印到错误日志中 log_error_verbosity。这些消息包括启动和关闭消息,以及对设置的一些重大更改。

在 MySQL 错误日志中,系统消息被标记为 系统。其他日志接收器可能会或可能不会遵循相同的约定,并且在生成的日志中,系统消息可能会被分配用于信息优先级的标签,例如注释信息。如果您根据消息标签对日志记录应用任何额外的过滤或重定向,系统消息不会覆盖您的过滤器,但会像处理其他消息一样由它处理。

抑制列表过滤

log_error_suppression_list 系统变量适用于用于错误日志的事件,并指定当事件以 或 的优先级发生时要抑制 的 WARNING事件 INFORMATION。例如,如果某种特定类型的警告在错误日志中被认为是不受欢迎的噪音 ,因为它经常出现但并不令人感兴趣,则可以将其抑制。 log_error_suppression_list 不抑制优先级为 ERROR或的消息SYSTEM

log_error_suppression_list 值可以是表示不抑制的空字符串,或者是一个或多个逗号分隔值的列表,指示要抑制的错误代码。错误代码可以用符号或数字形式指定。可以指定带或不带MY-前缀的数字代码。数字部分中的前导零不重要。允许的代码格式示例:

ER_SERVER_SHUTDOWN_COMPLETE
MY-000031
000031
MY-31
31

为了可读性和可移植性,符号值优于数值。

虽然要抑制的代码可以用符号或数字形式表示,但每个代码的数值必须在允许的范围内:

  • 1 到 999:服务器和客户端使用的全局错误代码。

  • 10000 及更高:旨在写入错误日志的服务器错误代码(不发送给客户端)。

此外,每个指定的错误代码必须实际被 MySQL 使用。尝试指定不在允许范围内或在允许范围内但未被 MySQL 使用的代码会产生错误,并且该 log_error_suppression_list 值保持不变。

有关错误代码范围以及每个范围内定义的错误符号和编号的信息,请参阅 第 B.1 节“错误消息源和元素”MySQL 8.0 错误消息参考

服务器可以为不同优先级的给定错误代码生成消息,因此抑制与 中列出的错误代码关联的消息 log_error_suppression_list 取决于其优先级。假设变量的值为'ER_PARSER_TRACE,MY-010001,10002'。然后 log_error_suppression_list 对这些代码的消息产生这些影响:

  • 优先级为 WARNING或 的消息INFORMATION将被抑制。

  • 优先级为 ERRORSYSTEM的消息不会被抑制。

冗长和抑制列表交互

的效果 与 的效果log_error_verbosity相结合 log_error_suppression_list。考虑使用这些设置启动的服务器:

[mysqld]
log_error_verbosity=2     # error and warning messages only
log_error_suppression_list='ER_PARSER_TRACE,MY-010001,10002'

在这种情况下, log_error_verbosity允许具有ERRORWARNING优先级的消息并丢弃具有 INFORMATION优先级的消息。在未丢弃的消息中, log_error_suppression_list 丢弃具有WARNING优先级和任何指定错误代码的消息。

笔记

示例中显示的 2的log_error_verbosity 值也是它的默认值,所以这个变量对 INFORMATION消息的影响就像刚才描述的那样默认,没有显式设置。log_error_verbosity如果要 log_error_suppression_list 影响具有INFORMATION 优先级 的消息,则必须设置 为 3。

考虑使用此设置启动的服务器:

[mysqld]
log_error_verbosity=1     # error messages only

在这种情况下, log_error_verbosity允许具有ERROR优先级的消息并丢弃具有WARNINGINFORMATION优先级的消息。设置 log_error_suppression_list 无效,因为它可能抑制的所有错误代码都已由于 log_error_verbosity设置而被丢弃。