每个错误日志接收器(写入器)组件都有一种特征输出格式,用于将消息写入其目的地,但其他因素可能会影响消息的内容:
- 日志编写器可用的信息。如果在执行写入程序组件之前执行的日志过滤器组件删除了日志事件属性,则该属性不可用于写入。有关日志过滤的信息,请参见第5.4.2.3节“错误日志过滤的类型”。
- 系统变量可能会影响日志编写器。请参阅 影响错误日志格式的系统变量。
对于所有日志编写器,错误日志消息中包含的ID是mysqld中负责编写消息的线程的ID 。该ID指示服务器的哪个部分产生了该消息,并且与常规查询日志和慢速查询日志消息一致,其中包括连接线程ID。
log_sink_internal输出格式
内部日志记录器生成传统的错误日志输出。它使用以下格式写消息:
timestamp thread_id [priority] [err_code] [subsystem] message
的[和]方括号字符是在消息格式文本字符。它们并不表示字段是可选的。
在 和 领域在MySQL 8.0中添加。它们是旧服务器生成的日志中缺少的。日志解析器可以将这些字段视为消息文本的一部分,仅对于服务器最近写入的日志(包括它们)才存在。解析器必须将 指标的一部分 视为字符串值。 [*err_code*]``[*subsystem*]err_code[*err_code*]
例子:
2020-03-22T12:35:47.538083Z 0 [Note] [MY-012487] [InnoDB] InnoDB: DDL log recovery : begin
2020-03-22T12:35:47.550565Z 0 [Warning] [MY-010068] [Server] CA certificate /var/mysql/sslinfo/cacert.pem is self signed.
2020-03-22T12:35:47.669397Z 4 [Note] [MY-010051] [Server] Event Scheduler: scheduler thread started with id 4
2020-03-22T12:35:47.550939Z 0 [Note] [MY-010253] [Server] IPv6 is available.
log_sink_json输出格式
JSON格式的日志编写器将消息生成为包含键值对的JSON对象。例如:
{
"prio": 3,
"err_code": 10051,
"source_line": 533,
"source_file": "event_scheduler.cc",
"function": "run",
"msg": "Event Scheduler: scheduler thread started with id 5",
"time": "2020-03-19T12:30:20.297184Z",
"ts": 1584621317167,
"thread": 5,
"err_symbol": "ER_SCHEDULER_STARTED",
"SQL_state": "HY000",
"subsystem": "Server",
"buffered": 1584621020297184,
"label": "Note"
}
该ts(时间戳)键在MySQL 8.0.20添加是唯一的JSON格式的日志作家。该值是一个整数,指示自纪元('1970-01-01 00:00:00'UTC)以来的毫秒数。
log_sink_syseventlog输出格式
系统日志编写器产生的输出符合本地平台上使用的系统日志格式。
早期启动日志输出格式
服务器在处理启动选项之前,因此在知道错误日志设置(例如log_error_verbosity和和 log_timestamps系统变量值)以及知道要使用的日志组件之前,会生成一些错误日志消息 。服务器处理在启动过程早期生成的错误日志消息,如下所示:
-
在MySQL 8.0.14之前,服务器会生成具有默认时间戳,格式和详细级别的消息,并对其进行缓冲。在处理启动选项并知道错误日志配置之后,服务器将刷新缓冲的消息。由于这些早期消息使用默认的日志配置,因此它们可能与启动选项所指定的不同。此外,除了默认值以外,早期消息不会刷新到日志编写器。例如,登录到JSON编写器不包括这些早期消息,因为它们不是JSON格式。
-
从MySQL 8.0.14开始,服务器会缓冲日志事件,而不是格式化日志消息。这样一来,它便可以在已知设置后将配置设置追溯应用到那些事件,结果刷新的消息将使用配置的设置,而不是默认设置。同样,消息将刷新到所有已配置的编写器,而不仅仅是默认的编写器。
如果在知道日志配置之前发生了致命错误,并且服务器必须退出,则服务器将使用日志记录默认值设置缓冲消息的格式,以使它们不会丢失。如果没有发生致命错误,但是在处理启动选项之前启动速度过慢,则服务器会使用日志记录默认值定期格式化和刷新缓冲的消息,以免显得无响应。尽管此行为与8.0.14之前的行为类似,但使用的是默认值,但在发生特殊情况时,最好不要丢失消息。
影响错误日志格式的系统变量
该log_timestamps系统变量控制在写入错误日志消息时间戳的时区(以及一般查询日志和慢查询日志文件)。允许的值为 UTC(默认值)和 SYSTEM(本地系统时区)。




