首批通过分布式安全可靠测评,为关键业务系统打造
日志级别
更新时间:2023-12-05 17:45:42
OceanBase 数据库日志划分了七个日志级别,含义如下表所示。表中的日志级别从高到低依次排列。
| 日志级别 | 含义 |
|---|---|
| ERROR | 严重错误。用于记录系统的故障信息,且必须进行故障排除,否则系统不可用。 |
| WARN | 警告。系统能继续提供服务,但行为可能不符合预期,或可能将有严重错误发生,需进行故障排除。 |
| INFO | 提示。用于记录系统运行的当前状态,该信息为正常信息。 |
| EDIAG | Error Diagnosis, 协助故障排查的诊断信息,通常为 OceanBase 数据库程序的 Bug。 |
| WDIAG | Warning Diagnosis, 协助故障排查的诊断信息,预期内的错误,OceanBase 数据库能进行容错。 |
| TRACE | SQL 语句级调试信息,日志数与 SQL 复杂度相关与访问数据量无关。 |
| DEBUG | 调试信息。用于调试时更详细地了解系统运行状态,包括当前调用的函数名、参数、变量、函数调用返回值等。 |
注意
本文介绍的查看和设置日志级别仅对普通日志文件(election.log、observer.log、rootservice.log)生效。对于 WARNING 日志文件(带有 `.wf` 后缀的日志文件),总是打印 WARN 及高于 WARN 日志级别的日志。
可通过 SHOW PARAMETERS 命令来查看当前的日志打印级别,日志的默认打印级别为 WDIAG 级别。
obclient> SHOW PARAMETERS LIKE '%syslog_level%';
返回结果如下:
+-------+----------+----------------+----------+--------------+-----------+-------+------------------------------------------------------------------------------------------------------------------------------+----------+---------+---------+-------------------+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level |
+-------+----------+----------------+----------+--------------+-----------+-------+------------------------------------------------------------------------------------------------------------------------------+----------+---------+---------+-------------------+
| zone1 | observer | xx.xx.xx.xx | 28824 | syslog_level | NULL | WDIAG | specifies the current level of logging. There are DEBUG, TRACE, WDIAG, EDIAG, INFO, WARN, ERROR, seven different log levels. | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
+-------+----------+----------------+----------+--------------+-----------+-------+------------------------------------------------------------------------------------------------------------------------------+----------+---------+---------+-------------------+
1 row in set (0.054 sec)
OceanBase 数据库支持设置日志级别,从而获取更精确的目标日志。可以从三个级别设置:系统级别、Session 级别、语句级别,打印日志时,优先级从高到低分别为语句、Session、系统。OceanBase 数据库也支持按模块设置。
- 系统级别:作用范围为整个集群所有 OBServer。仅支持在系统租户下配置。
- Session 级别:作用范围为当前租户在集群内所在的 OBServer。
- 设置 Session 级别的变量仅对当前 Session 有效,对其他 Session 无效。
- 设置 Global 级别的变量对当前 Session 无效,需要重新登录建立新的 Session 才会生效。
- 语句级别:作用范围为当前执行语句所在的 OBServer。只在 SQL 语句执行期间生效。
以下为通过系统级别、Session 级别和语句级别三个级别对日志打印级别进行设置的具体方法。
通过系统级别设置日志模块的级别。
可通过如下两种方式进行设置:
通过系统配置项
syslog_level设置系统级别的日志级别。例如:设置 SQL 模块的日志级别为debug,设置 COMMON 模块的日志级别为error。obclient > ALTER SYSTEM SET syslog_level='sql.*:debug, common.*:error';通过操作系统
bash kill -41/42 $pid命令设置系统级别的日志级别。kill -41用于降低程序日志的级别。例如:当前程序日志的级别为 INFO ,执行kill -41后,则级别降低至 TRACE。kill -42用于升高程序日志的级别。例如:当前程序日志的级别为 INFO ,执行kill -42后,则级别升高至 WARN 。推荐通过系统配置项
syslog_level设置系统级别的日志级别。因为 OceanBase 数据库在刷新配置时,会导入config文件(OceanBase 安装目录下的etc/observer.config.bin)中配置的syslog_level,导致 kill 方式失效。注意
建议仅在 SQL 客户端登录不了 OceanBase 集群的情况下使用
kill -41/kill -42调节日志级别。
通过 Session 级别设置日志模块的级别。
通过系统变量
ob_log_level设置 Session 级别的日志级别。例如:设置 SQL 模块的日志级别为debug,设置 COMMON 模块的日志级别为info。obclient > SET @@ob_log_level='sql.*:debug, common.*:info';通过语句级别设置日志模块的级别。
可以通过 Hint 设置语句级别的日志级别。例如:设置 SQL 模块的日志级别为
debug,设置 COMMON 模块的日志级别为info。更多 Hint 语句相关的介绍,请参见 Optimizer Hint。obclient > SELECT /*+log_level('sql.*:debug, common.*:info')*/ * FROM t;说明
如果使用 MySQL 的 C 客户端执行带 Hint 的 SQL 语句,需要使用
-c选项登录,否则 MySQL 客户端会将 Hint 作为注释从用户 SQL 语句中去除,导致系统无法收到用户 Hint。