错误事件旨在错误日志中包含一组字段,每个字段由键/值对组成。事件字段可以分类为核心、可选或用户定义:
-
核心字段是自动设置的错误事件。但是,在事件处理过程中,核心字段的存在不一定,因为核心字段,如任何类型的字段,可以被日志过滤器unset。如果这样发生,字段将无法被后续处理中的过滤器和组件找到(例如日志接收器)。
-
可选字段通常不存在,但可能出现在某些事件类型中。当存在时,可选字段提供了额外的事件信息,如适用和可用。
-
用户定义字段是任何名称不作为核心或可选字段的字段。用户定义字段直到被日志过滤器创建时不存在。
如前述描述所示,任何给定的字段可能在事件处理过程中不存在,或者因为它从不在那里,或者被过滤器丢弃了。对于日志接收器,字段不存在的效果是特定于接收器的。例如,接收器可能会从日志消息中省略该字段,指示该字段丢失,或者用默认值代替。当怀疑时,请测试:使用unset该字段的过滤器,然后检查日志接收器对其的处理。
以下部分描述了核心和可选错误事件字段。对于个别日志过滤器组件,可能存在这些字段的过滤器特定考虑,或者过滤器可能添加未列出的用户定义字段。有关详细信息,请参阅特定过滤器的文档。
这些错误事件字段是核心字段:
-
time
事件时间戳,以微秒精度。
-
msg
事件消息字符串。
-
prio
事件优先级,以指示系统、错误、警告或注意/信息事件。此字段对应于
syslog
中的严重性。下表显示了可能的优先级。Event Type Numeric Priority 系统事件 0 错误事件 1 警告事件 2 注意/信息事件 3 prio
值是数字。相关的是,错误事件也可能包括一个可选的label
字段,表示优先级作为字符串。例如,事件的prio
值为 2 可能具有'Warning'
的label
值。过滤器组件可能根据优先级包括或删除错误事件,除非系统事件是强制性的且不能删除的。
一般来说,消息优先级是根据以下规则确定的:
情况或事件是否可操作?
-
是:情况或事件是否可忽略?
-
是:优先级为警告。
-
否:优先级为错误。
-
-
否:情况或事件是否强制性的?
-
是:优先级为系统。
-
否:优先级为注意/信息。
-
-
-
err_code
事件错误代码,作为数字(例如,
1022
)。 -
err_symbol
事件错误符号,作为字符串(例如,
'ER_DUP_KEY'
)。 -
SQL_state
事件 SQLSTATE 值,作为字符串(例如,
'23000'
)。 -
subsystem
事件发生的子系统。可能的值是
InnoDB
(InnoDB
存储引擎)、Repl
(复制子系统)和Server
(否则)。
可选错误事件字段分为以下类别:
-
关于错误的附加信息,例如操作系统错误或错误标签:
-
OS_errno
操作系统错误号。
-
OS_errmsg
操作系统错误消息。
-
标签
对应于
prio
值的标签,以字符串形式。
-
-
事件发生的客户端标识:
-
用户
客户端用户。
-
主机
客户端主机。
-
线程
在 mysqld 中负责产生错误事件的线程 ID。该 ID 表示服务器的哪一部分产生了事件,与一般查询日志和慢查询日志消息一致,包括连接线程 ID。
-
查询 ID
查询 ID。
-
-
调试信息:
-
源文件
事件发生的源文件,不包括前导路径。
-
源行
事件发生的源文件中的行号。
-
函数
事件发生的函数。
-
组件
事件发生的组件或插件。
-