本节介绍哪些服务器选项配置默认错误日志目标,可以是控制台或命名文件。它还指示哪些日志接收器组件将其自身的输出目标基于默认目标。
在本讨论中,““控制台”” 表示 stderr,即标准错误输出。这是您的终端或控制台窗口,除非标准错误输出已重定向到其他目标。
服务器对确定默认错误日志目标的选项的解释在 Windows 和 Unix 系统上略有不同。请务必使用适合您平台的信息配置目标。服务器解释默认错误日志目标选项后,它会设置 log_error 系统变量以指示默认目标,这会影响多个日志接收器组件写入错误消息的位置。以下各节将讨论这些主题。
在 Windows 上,mysqld 使用 --log-error、--pid-file 和 --console 选项来确定默认错误日志目标是控制台还是文件,如果是文件,则确定文件名。
如果指定了
--console,则默认目标为控制台。(如果同时指定了--console和--log-error,则--console优先,并且以下有关--log-error的项目不适用。)如果未指定
--log-error或指定了该选项但未命名文件,则默认目标是数据目录中名为的文件,除非指定了host_name.err--pid-file选项。在这种情况下,文件名是 PID 文件的基本名称,后缀为.err,位于数据目录中。如果指定了
--log-error以命名文件,则默认目标是该文件(如果名称没有后缀,则添加.err后缀)。文件位置在数据目录下,除非指定了绝对路径名以指定其他位置。
如果默认错误日志目标是控制台,则服务器会将 log_error 系统变量设置为 stderr。否则,默认目标是一个文件,服务器会将 log_error 设置为文件名。
在 Unix 和类 Unix 系统上,mysqld 使用 --log-error 选项来确定默认错误日志目标是控制台还是文件,如果是文件,则确定文件名。
如果未指定
--log-error,则默认目标为控制台。如果指定了
--log-error但未命名文件,则默认目标是数据目录中名为的文件。host_name.err如果指定了
--log-error以命名文件,则默认目标是该文件(如果名称没有后缀,则添加.err后缀)。文件位置在数据目录下,除非指定了绝对路径名以指定其他位置。如果在使用 mysqld_safe 启动服务器的系统上,在
[mysqld]、[server]或[mysqld_safe]部分的选项文件中给出了--log-error选项,则 mysqld_safe 会找到并使用该选项,并将其传递给 mysqld。
Yum 或 APT 软件包安装通常会在服务器配置文件中使用类似 log-error=/var/log/mysqld.log 的选项,将错误日志文件位置配置在 /var/log 下。从选项中删除路径名会导致使用数据目录中的 文件。host_name.err
如果默认错误日志目标是控制台,则服务器会将 log_error 系统变量设置为 stderr。否则,默认目标是一个文件,服务器会将 log_error 设置为文件名。
服务器解释错误日志目标配置选项后,它会设置 log_error 系统变量以指示默认错误日志目标。日志接收器组件可以根据 log_error 值设置其自身的输出目标,也可以独立于 log_error 确定其目标。
如果 log_error 为 stderr,则默认错误日志目标为控制台,并且根据默认目标设置其输出目标的日志接收器也会写入控制台。
log_sink_internal、log_sink_json、log_sink_test:这些接收器写入控制台。即使对于可以多次启用的接收器(例如log_sink_json)也是如此;所有实例都写入控制台。log_sink_syseventlog:此接收器写入系统日志,而不管log_error的值如何。
如果 log_error 不是 stderr,则默认错误日志目标是一个文件,log_error 指示文件名。根据默认目标设置其输出目标的日志接收器会根据该文件名设置输出文件名。(接收器可以使用完全相同的名称,也可以使用其变体。)假设 log_error 值为 file_name。然后日志接收器会像这样使用该名称:
log_sink_internal、log_sink_test:这些接收器写入file_name。log_sink_json:在log_error_services值中命名的此接收器的连续实例写入名为file_name加上编号为.的后缀的文件:NN.json、file_name.00.json,依此类推。file_name.01.jsonlog_sink_syseventlog:此接收器写入系统日志,而不管log_error的值如何。