WL#11393: Implement an interface to suppress error logs of type warning or note.
Affects: Server-8.0
—
Status: Complete
The MySQL server shall accept a new optional list at start-up or at runtime. Messages for error-codes on this list are not included in the error-log when thrown with a severity of WARNING or INFORMATION, but will be included when thrown with a severity of ERROR or SYSTEM. This functionality will be built-in (no need to install or load a component or plugin) and available by default.
Func-Req 1 - global configuration variable
Func-Req 1.1
A new system variable, @@global.log_error_suppression_list, shall be added to
the server.
Func-Req 1.2
The variable is of string-type and may be set to an empty string, or to a comma-
separated list of error-codes.
Func-Req 1.3
A comma is valid only between two error-codes, not at the start or end of the
list or immediately following another comma.
Func-Req 1.4
Error-codes may be expressed in the forms understood and output by the perror
tool ("MY-12345", "85555", etc.). Only error-codes registered in the error-log
range (index 10,000+) and in the "global errors" range (shared between MySQL
server and client applications, range [1,1000[ shall be accepted.
Func-Req 1.5
By default, the error logging pipeline @@global.log_error_services is configured
to use the basic filter, log_filter_internal. If (and only if)
log_filter_internal is enabled in this manner, the suppression list will be
applied. This gives log_error_suppression_list the same behavior as
log_error_verbosity.
Func-Req 1.6
"Application" for the purposes of this WL means that any event that was reported
with a severity lower than ERROR (that is to say, a severity of WARNING or
INFORMATION) and whose error-code is in the suppression list will be discarded
when log_filter_internal is called. Conversely, events with a severity of SYSTEM
or ERROR will not be discarded by this mechanism even if listed in this
variable.
Func-Req 1.7
In the MySQL server, an event's severity is not registered alongside its
message; instead, the severity is set at the time the logger is called. The same
message/error-code may be used with different severities at different locations
in the source code. (For messages intended for the client, severity may also
depend on e.g. sql_mode.) Therefore at the time the suppression list is
assigned, we cannot know which items will be impossible to suppress later
(ERROR, SYSTEM), and so we can not throw a warning to that effect.
Moreover, we also do not throw such a warning when at run-time, a message thrown
as ERROR or SYSTEM is logged despite of being in the suppression list, as that
would defeat the original goal of despamming the error log.
Func-Req 1.8
The default value of the variable shall be "" (an empty list, and therefore, no
suppressions by default).
Func-Req 2 - command-line option
Func-Req 2.1
The variable shall also be available as a command-line option, --log-error-
suppression-list.
Func-Req 2.2
Failure to set a value passed at start-up shall be non-fatal; the default value
shall be used in such cases, and an error logged.
I-1 Semantics NO CHANGE I-2 Instrumentation NO CHANGE I-3 Error and Warnings NO CHANGE I-4 Install/Upgrade NO CHANGE I-5 Commercial plugins NO CHANGE. I-6 Replication NO CHANGE (Variable is not binlogged) I-7 XProtocols NO CHANGE I-8 Protocols NO CHANGE I-9 Security NO CHANGE Future filters may elect to obfuscate parts of plain-text messages however, etc. I-10 Log Files YES. [LOG01] Events with a priority of WARNING or INFORMATION whose error-code is in the suppression list will not be sent to the error log. (Specifically, the default filter "log_filter_internal" that also handles --log-error-verbosity must be configured in log_error_services, as it is by default; it marks the point in the pipeline where these events are removed. All subsequent log- services in the pipeline, usually log-sinks/log-writers, will not receive the events in question.) I-11 MySQL clients NO CHANGE I-12 Auth plugins NO CHANGE I-13 Globalization NO CHANGE I-14 Configuration YES. [CONF02] The filter engine shall use a new system variable for its configuration; log_error_suppression_list. This global system variable shall reside in the MySQL server's default namespace. [CONF01] This variable shall also be available on the command-line. I-15 File formats NO CHANGE (see log writers for that) I-16 Plugins/APIs NO CHANGE. I-17 Other programs NO CHANGE I-18 Storage engines NO CHANGE I-19 Data types NO CHANGE
log_filter_internal implements this functionality, as well as that of log_error_verbosity. Both may be used concurrently (e.g. setting log_error_verbosity to "discard information-items", then setting log_error_suppression_list to a list of warnings to discard additionally, leaving a result set of "no info items, only warnings of interest, and all errors and system items". Both system variables serve as simplified user interfaces to the built-in filtering engine WL#9342 that is fully exposed by the filtering language implemented in WL#9651. They convert their input into rules for said engine; both variables inject their rules into the same rule-set. When updating the suppression list, all previous suppression rules are discarded (while leaving any log_error_verbosity rules in place); then rules for each error-code in the suppression list are added to the rule-set.
Copyright (c) 2000, 2025, Oracle Corporation and/or its affiliates. All rights reserved.