Expand description
§dm-database-parser-sqllog
一个高性能的达梦数据库 sqllog 日志解析库,提供零分配或低分配的记录切分与解析功能。
§主要特点
- 零分配解析:基于时间戳的记录切分,使用流式 API 避免额外内存分配
- 高效模式匹配:使用双数组 Aho-Corasick(daachorse)进行高效模式匹配
- 轻量级结构:解析结果使用引用(
&str),避免不必要的字符串复制 - 灵活的 API:提供批量解析、流式解析等多种使用方式
§快速开始
use dm_database_parser_sqllog::{split_by_ts_records_with_errors, parse_record, for_each_record};
let log_text = r#"2025-08-12 10:57:09.562 (EP[0] sess:1 thrd:1 user:joe trxid:0 stmt:1 appname:MyApp) SELECT 1"#;
// 将文本拆分为记录并获取前导错误
let (records, errors) = split_by_ts_records_with_errors(log_text);
println!("records: {}, leading errors: {}", records.len(), errors.len());
// 流式处理每条记录(零分配)
for_each_record(log_text, |rec| {
let parsed = parse_record(rec);
println!("ts={} body={}", parsed.ts, parsed.body);
});§模块组织
Re-exports§
pub use error::ParseError;pub use parser::for_each_record;pub use parser::parse_all;pub use parser::parse_into;pub use parser::parse_record;pub use parser::parse_records_with;pub use parser::split_by_ts_records_with_errors;pub use parser::split_into;pub use parser::ParsedRecord;pub use parser::RecordSplitter;pub use sqllog::Sqllog;