postfix_log_parser/
cli.rs

1use std::env;
2use std::path::Path;
3use std::process;
4
5/// CLI配置结构体
6#[derive(Debug)]
7pub struct CliConfig {
8    pub input_file: String,
9    pub output_format: OutputFormat,
10}
11
12/// 输出格式枚举
13#[derive(Debug)]
14pub enum OutputFormat {
15    Json,
16    // 未来可以添加其他格式: Csv, Xml等
17}
18
19impl CliConfig {
20    /// 解析命令行参数
21    pub fn from_args() -> Self {
22        let args: Vec<String> = env::args().collect();
23
24        if args.len() != 2 {
25            Self::print_usage(&args[0]);
26            process::exit(1);
27        }
28
29        let input_file = args[1].clone();
30
31        // 验证输入文件是否存在
32        if !Path::new(&input_file).exists() {
33            eprintln!("❌ 错误: 日志文件不存在: {}", input_file);
34            process::exit(1);
35        }
36
37        Self {
38            input_file,
39            output_format: OutputFormat::Json, // 目前只支持JSON
40        }
41    }
42
43    /// 打印使用说明
44    fn print_usage(program_name: &str) {
45        eprintln!("📖 PostfixLogParser - 高性能Postfix日志解析工具");
46        eprintln!();
47        eprintln!("用法:");
48        eprintln!("  {} <日志文件路径>", program_name);
49        eprintln!();
50        eprintln!("示例:");
51        eprintln!("  {} /var/log/mail.log", program_name);
52        eprintln!("  {} logs/postfix.log", program_name);
53        eprintln!("  {} /path/to/mail.log", program_name);
54        eprintln!();
55        eprintln!("特性:");
56        eprintln!("  ✅ 支持完整的SMTPD事件解析");
57        eprintln!("  ✅ 高性能正则表达式优化");
58        eprintln!("  ✅ JSON格式输出");
59        eprintln!("  ✅ 详细的事件字段提取");
60        eprintln!();
61        eprintln!("输出: 结构化JSON格式的解析结果");
62    }
63}