#### 5.4.2.5 基于优先级的错误日志过滤（日志\_筛选\_内部的）

这`log_filter_internal`日志过滤器组件实现了一种基于错误事件优先级和错误代码的简单形式的日志过滤。影响如何`log_filter_internal`允许或禁止用于错误日志的错误、警告和信息事件，设置[`log_error_verbosity`](server-system-variables.html#sysvar_log_error_verbosity)和[`log_error_suppression_list`](server-system-variables.html#sysvar_log_error_suppression_list)系统变量。

`log_filter_internal`内置并默认启用。如果禁用此过滤器，[`log_error_verbosity`](server-system-variables.html#sysvar_log_error_verbosity)和[`log_error_suppression_list`](server-system-variables.html#sysvar_log_error_suppression_list)没有效果，因此必须使用另一个过滤器服务而不是在需要的地方执行过滤（例如，在使用时使用单独的过滤器规则`log_filter_dragnet`）。有关过滤器配置的信息，请参阅[第 5.4.2.1 节，“错误日志配置”](error-log-configuration.html).

-   [冗长过滤](error-log-priority-based-filtering.html#error-log-verbosity-filtering)

-   [抑制列表过滤](error-log-priority-based-filtering.html#error-log-suppression-filtering)

-   [详细程度和抑制列表交互](error-log-priority-based-filtering.html#error-log-verbosity-suppression-interaction)

##### 冗长过滤

用于错误日志的事件的优先级为`错误`,`警告`， 要么`信息`.这[`log_error_verbosity`](server-system-variables.html#sysvar_log_error_verbosity)系统变量根据允许写入日志的消息的优先级来控制详细程度，如下表所示。

| 日志\_错误\_详细值 | 允许的消息优先级 |
| ----------- | -------- |
| 1 | `错误` |
| 2 | `错误`,`警告` |
| 3 | `错误`,`警告`,`信息` |

如果[`日志错误详细`](server-system-variables.html#sysvar_log_error_verbosity)如果为2或更大，服务器将记录有关不安全的语句的消息。如果该值为3，则服务器会记录中断的连接以及新连接尝试的拒绝访问错误。看见[第B.3.2.9节，“通信错误和中断的连接”](communication-errors.html).

如果使用复制，则[`日志错误详细`](server-system-variables.html#sysvar_log_error_verbosity)建议值为2或更大，以获取有关正在发生的情况的更多信息，例如有关网络故障和重新连接的消息。

如果[`日志错误详细`](server-system-variables.html#sysvar_log_error_verbosity)如果复制副本上的值为2或更大，则复制副本会将消息打印到错误日志，以提供有关其状态的信息，例如二进制日志和中继日志坐标，它开始工作的位置，切换到另一个中继日志的时间，断开连接后重新连接的时间，等等。

还有一个消息优先级为`系统`这不受冗长过滤的影响。有关非错误情况的系统消息将打印到错误日志中，而不考虑[`日志错误详细`](server-system-variables.html#sysvar_log_error_verbosity)价值这些消息包括启动和关闭消息，以及对设置的一些重大更改。

在MySQL错误日志中，系统消息被标记为“系统”。其他日志接收器可能遵循相同的约定，也可能不遵循相同的约定，在生成的日志中，系统消息可能会被分配用于信息优先级的标签，例如“Note”或“information”。如果根据消息的标签对日志应用任何附加筛选或重定向，系统消息不会覆盖您的筛选器，而是以与其他消息相同的方式由其处理。

##### 抑制列表过滤

这个[`日志错误抑制列表`](server-system-variables.html#sysvar_log_error_suppression_list)系统变量适用于用于错误日志的事件，并指定在优先级为时要抑制的事件`警告`或`信息`。例如，如果某一特定类型的警告在错误日志中被视为不受欢迎的“噪音”，因为它经常出现，但不受关注，则可以将其抑制。[`日志错误抑制列表`](server-system-variables.html#sysvar_log_error_suppression_list)不抑制优先级为的邮件`错误`或`系统`.

这个[`日志错误抑制列表`](server-system-variables.html#sysvar_log_error_suppression_list)值可以是无抑制的空字符串，也可以是一个或多个逗号分隔值的列表，指示要抑制的错误代码。错误代码可以以符号或数字形式指定。数字代码可以使用或不使用`我的-`前缀数字部分的前导零不重要。允许的代码格式示例：

```
ER_SERVER_SHUTDOWN_COMPLETE
MY-000031
000031
MY-31
31
```

为了可读性和可移植性，符号值比数值更可取。

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

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

-   10000及以上：拟写入错误日志（不发送到客户端）的服务器错误代码。

    此外，MySQL必须实际使用指定的每个错误代码。试图指定不在允许范围内或允许范围内但未被MySQL使用的代码会产生错误，并且[`日志错误抑制列表`](server-system-variables.html#sysvar_log_error_suppression_list)价值保持不变。

    有关错误代码范围以及每个范围内定义的错误符号和数字的信息，请参阅[第B.1节“错误消息源和元素”](error-message-elements.html)和[MySQL 8.0错误消息参考](https://dev.mysql.com/doc/mysql-errors/8.0/en/).

    服务器可以以不同的优先级为给定的错误代码生成消息，因此可以抑制与中列出的错误代码相关联的消息[`日志错误抑制列表`](server-system-variables.html#sysvar_log_error_suppression_list)这取决于它的优先级。假设变量的值为`“ER_解析器_跟踪，MY-01000110002”`然后[`日志错误抑制列表`](server-system-variables.html#sysvar_log_error_suppression_list)对这些代码的消息有以下影响：

-   生成的优先级为的消息`警告`或`信息`被压制。

-   生成的优先级为的消息`错误`或`系统`没有被压制。

##### 冗长和抑制列表交互

影响[`日志错误详细`](server-system-variables.html#sysvar_log_error_verbosity)结合了[`日志错误抑制列表`](server-system-variables.html#sysvar_log_error_suppression_list)请考虑使用这些设置启动的服务器：

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

在这种情况下，[`日志错误详细`](server-system-variables.html#sysvar_log_error_verbosity)允许带有`错误`或`警告`优先级，并丢弃带有`信息`优先事项在非公开信息中，[`日志错误抑制列表`](server-system-variables.html#sysvar_log_error_suppression_list)丢弃带有`警告`优先级和任何指定的错误代码。

笔记

这个[`日志错误详细`](server-system-variables.html#sysvar_log_error_verbosity)示例中显示的值2也是其默认值，因此此变量对`信息`默认情况下，消息与前面描述的一样，没有明确的设置。你必须定下来[`日志错误详细`](server-system-variables.html#sysvar_log_error_verbosity)如果你愿意的话，可以减到3[`日志错误抑制列表`](server-system-variables.html#sysvar_log_error_suppression_list)用…影响消息`信息`优先事项

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

```
[mysqld]
log_error_verbosity=1     # error messages only
```

在这种情况下，[`日志错误详细`](server-system-variables.html#sysvar_log_error_verbosity)允许带有`错误`优先级，并丢弃带有`警告`或`信息`优先事项背景[`日志错误抑制列表`](server-system-variables.html#sysvar_log_error_suppression_list)没有效果，因为它可能抑制的所有错误代码都已因错误而被丢弃[`日志错误详细`](server-system-variables.html#sysvar_log_error_verbosity)背景
