基于优先级的错误日志过滤(log filter internal)

来自泡泡学习笔记
跳到导航 跳到搜索

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


log_filter_internal是内置的,并且默认启用。如果禁用了此过滤器,则log_error_verbosity和log_error_suppression_list将不起作用,因此必须在需要的地方使用另一个过滤器服务进行过滤(例如,使用log_filter_dragnet时使用个别过滤规则)。


优先级过滤

用于错误日志的事件具有ERROR、WARNING或INFORMATION的优先级。log_error_verbosity系统变量根据要允许写入日志的消息的优先级来控制详细程度,如下表所示。


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


如果log_error_verbosity的值为2或更大,则服务器会记录有关不适合基于语句的日志记录的语句的消息。如果值为3,则服务器会记录终止的连接和新连接尝试的访问拒绝错误。


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


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


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


在MySQL错误日志中,系统消息标记为“System”。其他日志接收器可能会或可能不会遵循相同的约定,在生成的日志中,系统消息可能会被分配给用于信息优先级级别的标签,例如“Note”或“Information”。如果根据消息的标签应用任何其他过滤或重定向以进行日志记录,系统消息不会覆盖您的过滤器,而是以与其他消息相同的方式处理它们。



抑制列表过滤

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的值保持不变。


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

  • 优先级为WARNING或INFORMATION的生成的消息被抑制。
  • 优先级为ERROR或SYSTEM的生成的消息不被抑制。


详细程度和抑制列表的作用互相结合

考虑一个使用以下设置启动的服务器:

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


在这种情况下,log_error_verbosity允许具有ERROR或WARNING优先级的消息,并丢弃具有INFORMATION优先级的消息。在未被丢弃的消息中,log_error_suppression_list会丢弃具有WARNING优先级和任何命名的错误代码的消息。

注意
示例中显示的log_error_verbosity值为2,也是其默认值,因此默认情况下,此变量对INFORMATION消息的影响就是刚才描述的,无需显式设置。如果您希望log_error_suppression_list影响具有INFORMATION优先级的消息,必须将log_error_verbosity设置为3。


考虑一个使用以下设置启动的服务器:

[mysqld]
log_error_verbosity=1     # error messages only

在这种情况下,log_error_verbosity允许具有ERROR优先级的消息,并丢弃具有WARNING或INFORMATION优先级的消息。设置log_error_suppression_list不起作用,因为由于log_error_verbosity设置,所有可能被其抑制的错误代码已经被丢弃。