Expand description
§DM Database Parser - SQL Log
一个高性能的达梦数据库 SQL 日志解析器,支持批量解析和流式处理。
§功能特性
- 高性能解析: 使用零拷贝和预编译正则表达式优化性能
- 灵活的 API: 支持批量解析和流式处理两种模式
- 完整的类型安全: 使用强类型结构表示日志数据
- 详细的错误信息: 提供清晰的错误类型和消息
§快速开始
§从文件迭代处理 Sqllogs(推荐)
use dm_database_parser_sqllog::LogParser;
let parser = LogParser::from_path("sqllog.txt")?;
for result in parser.iter() {
match result {
Ok(sqllog) => {
println!("时间戳: {}", sqllog.ts);
println!("用户: {}", sqllog.parse_meta().username);
println!("SQL: {}", sqllog.body());
}
Err(e) => eprintln!("解析错误: {}", e),
}
}§从文件批量加载并解析为 Sqllog(自动并行处理)
// 若需要一次性加载所有记录到内存,可从迭代器收集:
let parser = dm_database_parser_sqllog::LogParser::from_path("sqllog.txt")?;
let results: Vec<_> = parser.iter().collect();
let sqllogs: Vec<_> = results.iter().filter_map(|r| r.as_ref().ok().cloned()).collect();
let errors: Vec<_> = results.iter().filter_map(|r| r.as_ref().err().cloned()).collect();
println!("成功解析 {} 条 SQL 日志", sqllogs.len());
println!("遇到 {} 个错误", errors.len());
// 直接使用解析好的 Sqllog
for sqllog in sqllogs {
println!("用户: {}, SQL: {}", sqllog.parse_meta().username, sqllog.body());
}§日志格式
支持的日志格式示例:
2025-08-12 10:57:09.548 (EP[0] sess:123 thrd:456 user:alice trxid:789 stmt:999 appname:myapp) SELECT * FROM table可选的性能指标:
SELECT * FROM table EXECTIME: 10.5(ms) ROWCOUNT: 100(rows) EXEC_ID: 12345.Re-exports§
pub use error::ParseError;pub use parser::LogParser;pub use sqllog::Sqllog;