配置参考

本文档描述 sqllog2db 中所有可用的配置选项。配置文件使用 TOML 格式编写。默认配置由 sqllog2db init -o config.toml --force 生成。以下每节记录一个配置块,包含字段、默认值和使用说明。


[sqllog]

指定要处理的输入日志文件。

[sqllog]
# 输入列表:目录、单文件或 glob 模式均可,支持多条目
inputs = ["sqllogs"]
# 多条目示例:
# inputs = ["sqllogs/2025-01/*.log", "sqllogs/2025-02/*.log"]
字段类型默认值描述
inputs[String](必填)输入路径数组,支持目录、单文件或 glob 模式(如 ./logs/2025-*.log

说明: 自动化脚本中建议使用绝对路径。相对路径从当前工作目录解析。目录条目递归查找 .log 文件,结果按路径排序保证确定性顺序。旧版 path = "..." 字段已在 v1.12 移除,请迁移为 inputs = ["..."]


[logging]

控制应用日志和错误日志行为。

[logging]
# 日志级别:trace、debug、info、warn、error
level = "info"
# 可选的解析失败错误日志文件
# file = "error.log"
字段类型默认值描述
levelString"info"最低日志级别(trace/debug/info/warn/error)
fileStringnull可选的解析错误输出文件路径

说明: 生产环境建议设置 level = "warn" 以减少输出噪音。解析错误是非致命的,单独记录;单条记录解析失败不会停止整个导出。


[filter.include] 和 [filter.exclude]

记录级过滤:include 规则使用 AND 语义,exclude 规则使用 OR 否决。

[filter]
# 时间范围过滤(在 [filter] 级,不在 include/exclude 内)
start_ts = "2025-04-15 00:00:00"
end_ts = "2025-04-16 23:59:59"
max_record_limit = 0

[filter.include]
# 每条过滤规则是一组字段-值对(规则内使用 AND)
# 多条规则之间也使用 AND
USERNAME = "APP_USER"
# APPGROUP = "WEB"
# IP_ADDRESS = "192.168.1.100"

[filter.exclude]
# 任意单条 exclude 匹配即丢弃记录(OR 否决)
# STMT_TYPE = "SEL"
# USERNAME = "BATCH_USER"
字段类型默认值描述
USERNAMEStringnull按数据库用户名过滤(支持正则)
APPGROUPStringnull按应用组名称过滤
IP_ADDRESSStringnull按客户端 IP 地址过滤
STMT_TYPEStringnull按语句类型过滤(INS/UPD/DEL/SEL)
TAGStringnull按日志标签过滤
start_tsStringnull过滤此时间戳之后的记录(位于 [filter] 级——不在 include/exclude 下)
end_tsStringnull过滤此时间戳之前的记录(位于 [filter] 级——不在 include/exclude 下)
max_record_limitusize0最多处理的记录数(0 = 无限制,位于 [filter] 级)

说明: include 和 exclude 组合规则为 (include_AND) AND (NOT exclude_OR)。同一过滤规则内的所有字段使用 AND 语义。多条 include 规则之间也使用 AND。exclude 使用 OR 否决:任意匹配即丢弃记录。事务级指标和 SQL 内容过滤器使用两遍预扫描检测事务边界。


[exporter.csv]

CSV 导出配置。当 CSV 和 SQLite 同时配置时,CSV 优先级更高。

[exporter.csv]
# 输出 CSV 文件路径
file = "output/sqllog.csv"
# 覆盖已存在的文件
overwrite = true
# 列分隔符(默认 ",")
# delimiter = ";"
# 可选:按索引选择特定列(从零开始)
# ordered_indices = [0, 1, 3, 5, 7]
字段类型默认值描述
fileString(必填)输出 CSV 文件路径
overwriteboolfalse覆盖已存在的文件
delimiterchar,列分隔符
ordered_indices[usize][](所有字段)字段投影——从零开始的列索引

说明: CSV 使用 2 MB BufWriter + itoa 零分配整数格式化,实现约 520 万条记录/秒的吞吐量。ordered_indices 用于选择精确的列顺序和子集。为空表示所有字段按默认顺序输出。


[exporter.sqlite]

SQLite 导出配置。当 CSV 和 SQLite 同时配置时,SQLite 优先级较低。

[exporter.sqlite]
# 输出 SQLite 数据库路径
file = "output/sqllog.db"
# 目标表名
table = "sqllog_records"
# 删除并重建已存在的表
overwrite = true
# 可选:按索引选择特定列(从零开始)
# ordered_indices = [0, 1, 3, 5, 7]
字段类型默认值描述
fileString(必填)输出 SQLite 数据库路径
tableString"sqllog_records"目标表名
overwriteboolfalse删除并重建已存在的表
ordered_indices[usize][](所有字段)字段投影——从零开始的列索引

说明: 使用批量 INSERT 配合 PRAGMA 优化(synchronous=OFF、mmap_size、cache_size),实现约 110 万条记录/秒的吞吐量。


附录:配置行为说明

导出器优先级

每次运行只有一个导出器处于活动状态。优先级:CSV > SQLite。当 [exporter.csv][exporter.sqlite] 都配置时,CSV 优先。移除或注释 CSV 节即可使用 SQLite。

处理管道快速路径

当没有启用任何过滤器时,整个处理管道通过单个 pipeline.is_empty() 检查绕过。这意味着可选功能在禁用时不会增加任何运行时开销。

配置验证

运行前使用 sqllog2db validate -c config.toml 检查配置。验证会一次性报告所有错误(而非遇错即停)。常见问题:缺少必填字段、无效路径、TOML 语法错误。

命令行子命令

sqllog2db 提供四个子命令:

sqllog2db init — 生成默认配置文件。支持 -o 指定输出路径、--force 强制覆盖。

sqllog2db validate — 校验配置文件。-c 指定配置文件路径,通过时静默退出(exit 0),失败时输出 [FAIL] <字段>: <原因> 并以非零码退出。

sqllog2db run — 执行日志导出。-c 指定配置文件路径,-v 详细模式,-q 静默模式。

sqllog2db stats — 统计分析。流式扫描日志文件,聚合慢 SQL 和高频 SQL。

  • -c 指定配置文件路径(复用 [sqllog] 输入配置和 [exporter] 输出目录)
  • --top N(默认 20):每张表输出 Top N 条记录
  • CSV 模式:在 [exporter.csv].file 同级目录输出 slow_sql.csvfrequent_sql.csv
  • SQLite 模式:在配置的数据库中写入 slow_sqlfrequent_sql

示例见快速入门指南

字段顺序

各 TOML 节中的字段可以按任意顺序排列。配置使用 serde 反序列化,与顺序无关。可选节可以完全省略——所有字段采用默认值。

环境变量

  • SQLLOG2DB_CONFIG — 设置默认配置文件路径(可被 -c 标志覆盖)
  • NO_COLOR — 禁用彩色终端输出
  • RUST_LOG — 使用 env_logger 时覆盖日志级别