默认错误日志目标配置
本节描述了配置默认错误日志目标的服务器选项,它可以是控制台或命名文件。它还指示哪些日志接收器组件将其输出目标基于默认目标。
在本讨论中,“控制台”指的是stderr,即标准错误输出。这是您的终端或控制台窗口,除非标准错误输出已被重定向到其他目标。
服务器对确定默认错误日志目标的选项的解释在Windows和Unix系统上略有不同。请务必使用适合您平台的信息配置目标。服务器解释默认错误日志目标选项后,它将设置log_error系统变量以指示默认目标,这会影响多个日志接收器组件写入错误消息的位置。
在Windows系统上的默认错误日志目标
在Windows上,默认的错误日志目标是通过--log-error、--pid-file和--console选项来确定是控制台还是文件,如果是文件的话,则确定文件名为:
- 如果给出了--console选项,则默认目标是控制台。如果同时给出了--console和--log-error,则--console优先,而关于--log-error的以下内容不适用。
- 如果没有给出--log-error,或者给出了但没有指定文件名,则默认目标是数据目录中名为host_name.err的文件,除非指定了--pid-file选项。在这种情况下,文件名为带有.err后缀的PID文件基名,位于数据目录中。
- 如果给出了--log-error来指定文件名,则默认目标是该文件(如果名字没有后缀,则添加.err后缀)。文件位置位于数据目录下,除非给定了绝对路径名以指定其他位置。
如果默认的错误日志目标是控制台,则服务器将log_error系统变量设置为stderr。否则,默认目标是文件,服务器将log_error设置为文件名。
在Unix和类Unix系统上的默认错误日志目标
在Unix和类Unix系统上,mysqld使用--log-error选项来确定默认的错误日志目标是控制台还是文件,如果是文件的话,则确定文件名为:
- 如果没有给出--log-error,则默认目标是控制台。
- 如果给出--log-error但没有指定文件名,则默认目标是数据目录中名为host_name.err的文件。
- 如果给出了--log-error来指定文件名,则默认目标是该文件(如果名字没有后缀,则添加.err后缀)。文件位置位于数据目录下,除非给定了绝对路径名以指定其他位置。
如果在[mysqld]、[server]或[mysqld_safe]部分的选项文件中给出了--log-error选项,对于使用mysqld_safe启动服务器的系统,mysqld_safe会找到并使用该选项,并将其传递给mysqld。
注意 常见的Yum或APT软件包安装会在服务器配置文件中使用类似log-error=/var/log/mysqld.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.json等等。
- log_sink_syseventlog:该组件会写入系统日志,不受log_error值的影响。