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 值 | 允许的消息优先级 |
---|---|
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.4 错误消息参考。
服务器可以在不同的优先级下为给定错误代码生成消息,因此抑制与 log_error_suppression_list
中列出的错误代码关联的消息取决于其优先级。假设该变量的值为 'ER_PARSER_TRACE,MY-010001,10002'
。那么 log_error_suppression_list
对这些代码的消息有以下影响:
以
WARNING
或INFORMATION
优先级生成的的消息将被抑制。以
ERROR
或SYSTEM
优先级生成的的消息不会被抑制。
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
允许 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
设置而被丢弃。