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, 2020, Oracle Corporation and/or its affiliates. All rights reserved.