postfix_log_parser/
cli.rs1use std::env;
2use std::path::Path;
3use std::process;
4
5#[derive(Debug)]
7pub struct CliConfig {
8 pub input_file: String,
9 pub output_format: OutputFormat,
10}
11
12#[derive(Debug)]
14pub enum OutputFormat {
15 Json,
16 }
18
19impl CliConfig {
20 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 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, }
41 }
42
43 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}