本节讨论如何选择用于错误记录的组件。有关特定于系统日志和JSON日志编写器的说明,请参见第5.4.2.3节“错误日志记录到系统日志”和 第5.4.2.4节“JSON格式的错误日志记录”。有关所有可用日志组件的更多详细信息,请参见 第5.5.1节“错误日志组件”。
基于组件的错误日志提供了以下功能:
日志事件可以被过滤器组件过滤以影响可用于写入的信息。
日志事件由汇(写)器组件输出。可以启用多个接收器组件,将错误日志输出写入多个目标。
内置的过滤器和写入器组件组合起来实现默认的错误记录格式。
可加载的作家可以记录到系统日志。
可加载的作家可以使用JSON格式进行日志记录。
系统变量控制启用哪些日志组件以及过滤日志事件的规则。
的log_error_services哪个日志组件系统变量控制以启用错误日志记录。它的值是以分号分隔的组件列表。空间并不重要。组件顺序很重要,因为服务器按所列顺序执行组件。
默认情况下,log_error_services 有这个值:
mysql> SELECT @@global.log_error_services;
+----------------------------------------+
| @@global.log_error_services |
+----------------------------------------+
| log_filter_internal; log_sink_internal |
+----------------------------------------+
该值表示日志事件首先通过内置过滤器组件 log_filter_internal
,然后通过内置日志记录器组件 log_sink_internal
。过滤器会修改稍后在该log_error_services
值中命名的组件所看到的日志事件 。接收器是日志事件的目的地。通常情况下,接收器将日志事件处理为具有特定格式的日志消息,并将这些消息写入其关联的输出(如文件或系统日志)。
如果log_error_services
分配的值不包含写入程序组件,则不会从该点写入日志输出。
组合log_filter_internal并 log_sink_internal实现默认的错误日志过滤和输出行为。这些组件的操作受其他服务器选项和系统变量的影响:
输出目标由--log-error选项决定 (并在Windows上--pid-file和 --console)。这些决定了是否将错误消息写入控制台或文件,并且如果是对文件,错误日志文件名称。
该log_error_verbosity 系统变量会影响哪些类型的日志事件 log_filter_internal许可证或者抑制。
要更改用于错误记录的日志组件组,必要时加载组件并修改该 log_error_services值。添加或删除日志组件受以下限制:
要启用日志组件,首先使用它 INSTALL COMPONENT(除非它是内置的或已经加载的),然后将该组件列入该log_error_services 值。
对于要在该log_error_services值中允许的组件 ,它必须是已知的。如果组件是内置的,或者它是可加载的并且已使用加载,则该组件是已知的 INSTALL COMPONENT。尝试在服务器启动时将未知组件命名为 log_error_services默认值。尝试在运行时命名未知组件会产生错误,并且该 log_error_services值保持不变。
要禁用日志组件,请将其从该log_error_services值中删除 。然后,如果组件可加载,并且您还想卸载它,请使用UNINSTALL COMPONENT。
尝试使用UNINSTALL COMPONENT卸载仍在该log_error_services值中命名的可加载组件时会 产生错误。
例如,要使用系统日志writer(log_sink_syseventlog)而不是默认writer(log_sink_internal),首先加载writer组件,然后修改
该 log_error_services
值:
INSTALL COMPONENT 'file://component_log_sink_syseventlog';
SET GLOBAL log_error_services = 'log_filter_internal; log_sink_syseventlog';
用于加载日志组件的URN INSTALL COMPONENT
是带有前缀的组件名称 file://component_
。例如,对于 log_sink_syseventlog
组件,相应的URN是file://component_log_sink_syseventlog
。
可以配置多个日志写入器将输出发送到多个目标。除了(而不是)默认写入器之外,为了启用系统日志写入器,请将log_error_services
值设置为 :
SET GLOBAL log_error_services = 'log_filter_internal; log_sink_internal; log_sink_syseventlog';
要恢复为只使用默认编写器并卸载系统日志编写器,请执行以下语句:学什么专业好
SET GLOBAL log_error_services = 'log_filter_internal; log_sink_internal;
UNINSTALL COMPONENT 'file://component_log_sink_syseventlog';
要在每个服务器启动时配置要启用的日志组件,请使用以下过程:
如果该组件可加载,请使用该组件
INSTALL COMPONENT
。加载组件将其注册到mysql.component
系统表中,以便服务器为后续启动自动加载它。log_error_services
在启动时 设置该值以包含组件名称。在服务器my.cnf
文件中设置该值,或使用SET PERSIST
它设置正在运行的MySQL实例的值,并保存用于后续服务器重新启动的值; 请参见 第13.7.5.1节“变量赋值的SET语法”。设置的值将在my.cnf
下次重新启动时生效。设置的值SET PERSIST
立即生效,并用于随后的重新启动。
假设您想为每个服务器启动配置log_sink_json
除了内置日志过滤器和写入器(log_filter_internal
, log_sink_internal
)之外的JSON日志writer()。如果未加载,请先加载JSON编写器:
INSTALL COMPONENT 'file://component_log_sink_json';
然后log_error_services
在服务器启动时设置生效。您可以将其设置在 my.cnf
:
[mysqld]
log_error_services='log_filter_internal; log_sink_internal; log_sink_json'
或者您可以使用SET PERSIST
以下设置 :
SET PERSIST log_error_services = 'log_filter_internal; log_sink_internal; log_sink_json';
命名的组件顺序 log_error_services
很重要,特别是关于过滤器和编写器的相对顺序。考虑这个 log_error_services
值:
log_filter_internal; log_sink_1; log_sink_2
在这种情况下,日志事件传递给内置过滤器,然后传递给第一个写入器,然后传递给第二个写入器。两位作家都会收到过滤的日志事件。
将其与此log_error_services
值进行比较 :
log_sink_1; log_filter_internal; log_sink_2
在这种情况下,日志事件传递给第一个写入器,然后传递给内置过滤器,然后传递给第二个写入器。第一位作者收到未经过滤的事件。第二个作家接收过滤的事件。如果您希望一个日志包含所有日志事件的消息,并且另一个消息仅包含一部分日志事件的消息,则可以以此方式配置错误日志记录。