---
title: "日志 - OceanBase 数据库 V4.3.2 | OceanBase 文档中心"
description: 日志 OBServer 的日志存放在 observer 的安装目录的 log 目录下面，分为四种日志 observer.log 、 rootservice.log 、 election.log 和 trace.log ，分别对应 OBServer 日志、RS 日志、选举日志和全链路追踪日志。 对于每一种日志，如 ob…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.3.2

# 日志

更新时间：2024-09-28 23:00:00

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.2/zh-CN/700.reference/100.oceanbase-database-concepts/1200.observer-node-architecture/400.log.md)  

OBServer 的日志存放在 `observer` 的安装目录的 `log` 目录下面，分为四种日志 `observer.log`、`rootservice.log`、 `election.log` 和 `trace.log`，分别对应 OBServer 日志、RS 日志、选举日志和全链路追踪日志。

对于每一种日志，如 `observer.log`，按照文件名大致分为以下几种：

- observer.log
 - observer.log.20210901123456
 - observer.log.wf
 - observer.log.wf.20210901123456

当 `observer.log` 达到 256M 时，会将其 rename 为第二种日志，后面的数字为时间戳。wf 日志的含义见下文 enable_syslog_wf 配置项。

## 日志格式

- 日志格式

  ```javascript
  [时间] 日志级别 [所属模块] 文件:行号 [线程 ID] [0] [trace_id] [lt] [丢弃日志数量]

  ```
 - 日志参数信息

  | 参数 | 描述 |
  | --- | --- |
  | 时间 | 记录的时间戳，记录了日志生成的具体日期和时间 |
  | 日志级别 | 日志的重要程度或级别 |
  | 所属模块 | 日志所属的模块或组件，标识了日志发生的位置和来源 |
  | 文件:行号 | 日志记录的源代码文件路径和行号，用于定位日志的源代码位置 |
  | 线程 ID | 生成该日志的线程的唯一标识符，用于区分不同线程产生的日志 |
  | 0 | 记录事务 ID 或标识其他与日志相关的信息，[0] 表示该字段的值为 0 |
  | trace_id | 表示该日志事件的跟踪 ID |
  | lt | lt 是一个标签，表示该标签的值为上一条日志记录耗费的时间（微秒），表示上一条日志的执行时间 |
  | 丢弃日志数量 | 用于记录在生成该条日志之前已经被丢弃的日志数量，表示之前的日志条目因为某种原因被丢弃或没有被记录 |
 - 日志示例

  ```javascript
  [2021-09-01 11:31:18.605433] INFO  [STORAGE] ob_pg_sstable_garbage_collector.cpp:170 [38715][0][Y0-0000000000000000-0-0] [lt=15] [dc=0] do one gc free sstable by queue(ret=0, free sstable cnt=0)

  ```

### 日志级别

从低到高有 7 种：DEBUG、TRACE、WDIAG、EDIAG、INFO、WARN、ERROR。

其中 ERROR 日志比较特殊，会将打日志时所在的堆栈打印出来（需要通过符号表解析）。

#### 注意

开启 DEBUG 日志将耗费大量资源，在较新版本中，DEBUG 日志在 Release 编译下会自动去掉，即使开启也无法生效。

### 所属模块

有很多种，可以大致区分日志所属模块。

### 线程 ID

打印日志所在的线程的 ID，可以用于跟踪对应线程的行为，对排查线程 Hang 住、超时等问题比较有用。

### TRACE_ID

OceanBase 数据库内部的 SQL 级别的 ID，默认为 Y0-0000000000000000-0-0，可以通过 `trace_id` 来找到一条 SQL 的执行过程，是排查问题的重要手段。

## 日志压缩

通过配置项来配置系统日志的压缩，包括设置压缩算法、磁盘空间上限和每种日志不压缩的文件数量。有关日志压缩的详细信息请参见 [日志压缩](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001049897)。

## 日志解压

有以下几种方式可以查看压缩后的日志文件：解压后查看、直接查看压缩文件和使用 obdiag 工具进行搜索。有关日志压缩的详细信息请参见 [日志解压](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001049897)。

## 相关配置项

以下所有配置项均为集群级别，需要在系统租户下使用。可以通过以下方法修改。

```shell
obclient> ALTER SYSTEM SET enable_syslog_recycle = False;

```

- **enable_syslog_recycle**

  用于设置是否打开记录 OBServer 节点启动前的旧日志的开关，默认为 False。与 `max_syslog_file_count` 配合使用，决定回收逻辑是否考虑旧的日志文件。

  开启后将会自动删除多余的日志，有关 `enable_syslog_recycle` 的详细信息请参见 [enable_syslog_recycle](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001052397)。
 - **enable_syslog_wf**

  是否启用 wf 日志，默认为 True。

  开启后会每种日志中 WARN 级别以上的日志复制到 wf 日志中，如 `observer.log.wf`。
 - **enable_async_syslog**

  是否启用异步写日志功能，默认为 True。

  关闭后将使用同步方式写日志，可以保证 observer 宕机前写完所有日志，但性能较差，不建议关闭。
 - **max_syslog_file_count**

  每种日志的最大日志数量，默认为 0。当且仅当该配置项大于 0 且该值大于等于 `syslog_file_uncompressed_count` 值，同时 `enable_syslog_recycle` 为 True 时才生效。

  #### 注意

  尽管该配置项的范围是 [0, +∞)，但 observer 源码中约束了该值不能超过 `MAX_LOG_FILE_COUNT`，即 10240，超过时依然可以设置成功但实际生效值为 MAX_LOG_FILE_COUNT。
 - **syslog_io_bandwidth_limit**

  日志限流量，默认为 30M。

  #### 注意

  当日志打印速度超过限制时，将打印以下信息。

  ```shell
  REACH SYSLOG RATE LIMIT

  ```
 - **syslog_level**

  打印的日志的最低级别，日志级别见上文，默认为 WDIAG。
 - **syslog_disk_size**

  系统日志的磁盘空间上限，默认值为 0M。日志可用空间由 `syslog_disk_size` 和实际磁盘空间共同决定，为两者中的最小值。当剩余可用磁盘空间少于 2GB 时，最旧的部分日志文件将会被删除。此外如果开启了日志压缩功能，当剩余可用磁盘空间少于 4GB 时，就会开始压缩日志文件。
 - **syslog_compress_func**

  设置系统日志的压缩算法，默认值为 none，表示关闭压缩功能。可选的压缩算法有 `zstd_1.0` 和 `zstd_1.3.8` 算法，设置可用的算法表示开启压缩功能。

  #### 注意

  压缩功能只会压缩以 `.log.{timestamp}`为后缀的日志，`timestamp` 表示创建文件时的时间戳，带有 `wf` 后缀的文件和没有时间戳的文件则不压缩。
 - **syslog_file_uncompressed_count**

  设置系统日志不压缩的文件数量。只在 `syslog_compress_func` 不为 none 时生效，每一种系统日志文件单独计算数量，不包括没有时间戳的日志文件。配置项 `syslog_compress_func` 与 配置项 `syslog_file_uncompressed_count`、`syslog_disk_size`、`max_syslog_file_count` 之间的关系：

     - `syslog_compress_func =none`：

           1. `syslog_file_uncompressed_count` 取值无效；
           2. `syslog_disk_size` 和 `max_syslog_file_count` 共同控制日志文件上限，同时满足数量和大小限制。
     - `syslog_compress_func !=none`：

           1. `max_syslog_file_count` 取值无效；
           2. 日志个数超过 `syslog_file_uncompressed_count` 取值的部分进行压缩，整体接近 `syslog_disk_size` 取值时开始删除最旧的日志。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
