7.4.2.5 优先级基于错误日志过滤(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
时)。关于过滤配置的信息,请参见第7.4.2.1节,“错误日志配置”。
错误日志中有事件的优先级是ERROR
、WARNING
或INFORMATION
。系统变量log_error_verbosity
控制日志中消息的详细性,根据以下表格所示。
log_error_verbosity Value | Permitted Message Priorities |
---|---|
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或更高,复制服务器将在错误日志中打印状态信息,如其工作的二进制日志和relay日志坐标、切换到另一个relay日志时、重新连接后等等。
还有一种消息优先级为SYSTEM
,不受 verbosity 过滤的影响。系统关于非错误情况的消息无论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
值保持不变。
关于错误代码范围和每个范围内定义的错误符号和数字,见第 B.1 节,“错误消息来源和元素”,和MySQL 8.4 错误消息参考。
服务器可以根据给定的错误代码生成不同优先级的消息,所以在log_error_suppression_list
中列出的错误代码的消息的抑制依赖于其优先级。假设变量的值为 'ER_PARSER_TRACE,MY-010001,10002'
。然后log_error_suppression_list
对于这些代码的消息具有以下效果:
-
优先级为
警告
或信息
的消息被抑制。 -
优先级为
错误
或系统
的消息不被抑制。
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
允许错误或警告级别的信息,并丢弃信息级别的信息。剩下的未丢弃的信息中,log_error_suppression_list
丢弃警告级别的信息和指定的错误代码。
log_error_verbosity
的值为 2 在示例中也就是其默认值,所以这个变量对信息级别的影响默认情况下就像前面描述的一样,不需要明确设置。要使 log_error_suppression_list
影响信息级别的信息,必须将 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
设置而被丢弃了。