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 错误日志中,系统消息被标记为 “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 9.0 错误消息参考。
服务器可以在不同的优先级下为给定的错误代码生成消息,因此抑制与 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_verbosity
设置为 3,如果您希望 log_error_suppression_list
影响具有 INFORMATION
优先级的消息。
考虑使用以下设置启动的服务器
[mysqld]
log_error_verbosity=1 # error messages only
在这种情况下,log_error_verbosity
允许具有 ERROR
优先级的消息,并丢弃具有 WARNING
或 INFORMATION
优先级的消息。设置 log_error_suppression_list
没有任何作用,因为所有可能被抑制的错误代码由于 log_error_verbosity
设置而已经被丢弃。