use postfix_log_parser::MasterParser;
fn main() {
println!("🕒 Postfix日志解析器 v0.2.0 - 新时间格式支持演示\n");
let parser = MasterParser::new();
let user_example =
"2025 Jun 16 11:06:14.897961 m01 postfix/qmgr[84]: 4bLFJP5hXGz1DGbl: removed";
println!("📝 用户提供的日志示例:");
println!(" {}\n", user_example);
let result = parser.parse(user_example);
if result.confidence > 0.0 {
if let Some(event) = result.event {
println!("✅ 解析成功!");
println!(" 📊 置信度: {}", result.confidence);
println!(" 🕐 时间戳: {}", event.timestamp);
println!(" 🏷️ 组件: {}", event.component);
println!(" 📋 事件类型: {:?}", event.event);
println!(" 🆔 队列ID: {:?}", event.queue_id);
let timestamp_str = event.timestamp.to_string();
if timestamp_str.contains(".897961") {
println!(" ✨ 毫秒精度完美保留: .897961");
}
match serde_json::to_string_pretty(&event) {
Ok(json) => {
println!("\n📄 JSON输出:");
println!("{}", json);
}
Err(e) => println!(" ❌ JSON序列化失败: {}", e),
}
}
} else {
println!("❌ 解析失败");
for error in result.parsing_errors {
println!(" 错误: {}", error);
}
}
println!("\n{}", "=".repeat(60));
println!("🧪 全格式兼容性测试");
println!("{}", "=".repeat(60));
let test_cases = vec![
("新格式+毫秒", "2025 Jun 16 11:06:14.897961 m01 postfix/qmgr[84]: 4bLFJP5hXGz1DGbl: removed"),
("新格式无毫秒", "2025 Jun 16 11:06:14 m01 postfix/qmgr[84]: 4bLFJP5hXGz1DGbl: removed"),
("旧格式兼容", "Jun 16 11:06:14 m01 postfix/qmgr[84]: 4bLFJP5hXGz1DGbl: removed"),
("隔离事件", "2025 Jun 16 11:06:14.123456 m01 postfix/cleanup[123]: 4bH9jF46N6zdgMn: hold: header X-Decision-Result: Quarantine from localhost[127.0.0.1]:34924; from=<test@example.com> to=<user@domain.com> proto=SMTP helo=<localhost>: Mail quarantined"),
("SMTPD连接", "2025 Jun 16 11:06:14.456789 mail01 postfix/smtpd[12345]: connect from client[192.168.1.100]"),
];
for (name, log) in test_cases {
println!("\n🔍 测试: {}", name);
let result = parser.parse(log);
if result.confidence > 0.0 {
if let Some(event) = result.event {
println!(" ✅ 成功 - 时间戳: {}", event.timestamp);
let ts_str = event.timestamp.to_string();
if ts_str.starts_with("2025-06-16") {
println!(" ✓ 年份正确解析");
}
if ts_str.contains(".") {
println!(" ✓ 毫秒精度保留");
}
}
} else {
println!(" ❌ 失败 - 置信度: {}", result.confidence);
}
}
println!("\n{}", "=".repeat(60));
println!("📊 组件支持状态检查");
println!("{}", "=".repeat(60));
let components = parser.registered_components();
println!("已注册组件数量: {}", components.len());
for component in components {
println!(" ✅ {}", component);
}
println!("\n🎉 新时间格式支持演示完成!");
println!("📈 所有组件都已支持新的时间格式,包含完整的毫秒精度。");
}