use postfix_log_parser::parse_log_line;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let log_lines = vec![
"Dec 30 12:34:56 mail01 postfix/smtpd[12345]: 4bG4VR5zTgz6pqsd: client=unknown[192.168.1.100]",
"Dec 30 12:34:57 mail01 postfix/cleanup[12346]: 4bG4VR5zTgz6pqsd: message-id=<test@example.com>",
"Dec 30 12:34:58 mail01 postfix/qmgr[12347]: 4bG4VR5zTgz6pqsd: from=<sender@example.com>, size=1234, nrcpt=1",
"Dec 30 12:34:59 mail01 postfix/smtp[12348]: 4bG4VR5zTgz6pqsd: to=<recipient@example.com>, relay=mx.example.com[1.2.3.4]:25, delay=0.5, status=sent",
];
println!("解析Postfix日志示例:");
println!("{}", "=".repeat(50));
for log_line in log_lines {
let result = parse_log_line(log_line);
match result.event {
Some(event) => {
println!("✓ 解析成功:");
println!(" 时间: {}", event.timestamp);
println!(" 主机: {}", event.hostname);
println!(" 组件: {}", event.component);
println!(" 进程ID: {}", event.process_id);
println!(" 日志等级: {}", event.log_level);
if let Some(queue_id) = &event.queue_id {
println!(" Queue ID: {}", queue_id);
}
println!(" 原始日志: {}", event.raw_log);
println!(" 事件类型: {}", event.event_type());
println!(" 事件详情: {:?}", event.event);
println!(" 置信度: {:.2}", result.confidence);
println!();
}
None => {
println!("✗ 解析失败:");
println!(" 原始行: {}", log_line);
if !result.parsing_errors.is_empty() {
println!(" 错误信息: {:?}", result.parsing_errors);
}
println!();
}
}
}
Ok(())
}