postfix-log-parser 0.2.0

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

/// CLI配置结构体
///
/// 存储命令行界面的配置参数和选项
#[derive(Debug)]
pub struct CliConfig {
    /// 输入日志文件路径
    /// 要解析的Postfix日志文件的完整路径
    pub input_file: String,

    /// 输出格式类型
    /// 指定解析结果的输出格式(当前主要支持JSON)
    pub output_format: OutputFormat,
}

/// 输出格式枚举
#[derive(Debug)]
pub enum OutputFormat {
    Json,
    // 未来可以添加其他格式: Csv, Xml等
}

impl CliConfig {
    /// 解析命令行参数
    pub fn from_args() -> Self {
        let args: Vec<String> = env::args().collect();

        if args.len() != 2 {
            Self::print_usage(&args[0]);
            process::exit(1);
        }

        let input_file = args[1].clone();

        // 验证输入文件是否存在
        if !Path::new(&input_file).exists() {
            eprintln!("❌ 错误: 日志文件不存在: {}", input_file);
            process::exit(1);
        }

        Self {
            input_file,
            output_format: OutputFormat::Json, // 目前只支持JSON
        }
    }

    /// 打印使用说明
    fn print_usage(program_name: &str) {
        eprintln!("📖 PostfixLogParser - 高性能Postfix日志解析工具");
        eprintln!();
        eprintln!("用法:");
        eprintln!("  {} <日志文件路径>", program_name);
        eprintln!();
        eprintln!("示例:");
        eprintln!("  {} /var/log/mail.log", program_name);
        eprintln!("  {} logs/postfix.log", program_name);
        eprintln!("  {} /path/to/mail.log", program_name);
        eprintln!();
        eprintln!("特性:");
        eprintln!("  ✅ 支持完整的SMTPD事件解析");
        eprintln!("  ✅ 高性能正则表达式优化");
        eprintln!("  ✅ JSON格式输出");
        eprintln!("  ✅ 详细的事件字段提取");
        eprintln!();
        eprintln!("输出: 结构化JSON格式的解析结果");
    }
}