postfix-log-parser 0.2.0

高性能模块化Postfix日志解析器,经3.2GB生产数据验证,SMTPD事件100%准确率
Documentation
use postfix_log_parser::parse_log_line;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 示例Postfix日志行
    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(())
}