postfix_log_parser/
cli.rs1use std::env;
2use std::path::Path;
3use std::process;
4
5#[derive(Debug)]
9pub struct CliConfig {
10 pub input_file: String,
13
14 pub output_format: OutputFormat,
17}
18
19#[derive(Debug)]
21pub enum OutputFormat {
22 Json,
23 }
25
26impl CliConfig {
27 pub fn from_args() -> Self {
29 let args: Vec<String> = env::args().collect();
30
31 if args.len() != 2 {
32 Self::print_usage(&args[0]);
33 process::exit(1);
34 }
35
36 let input_file = args[1].clone();
37
38 if !Path::new(&input_file).exists() {
40 eprintln!("❌ 错误: 日志文件不存在: {}", input_file);
41 process::exit(1);
42 }
43
44 Self {
45 input_file,
46 output_format: OutputFormat::Json, }
48 }
49
50 fn print_usage(program_name: &str) {
52 eprintln!("📖 PostfixLogParser - 高性能Postfix日志解析工具");
53 eprintln!();
54 eprintln!("用法:");
55 eprintln!(" {} <日志文件路径>", program_name);
56 eprintln!();
57 eprintln!("示例:");
58 eprintln!(" {} /var/log/mail.log", program_name);
59 eprintln!(" {} logs/postfix.log", program_name);
60 eprintln!(" {} /path/to/mail.log", program_name);
61 eprintln!();
62 eprintln!("特性:");
63 eprintln!(" ✅ 支持完整的SMTPD事件解析");
64 eprintln!(" ✅ 高性能正则表达式优化");
65 eprintln!(" ✅ JSON格式输出");
66 eprintln!(" ✅ 详细的事件字段提取");
67 eprintln!();
68 eprintln!("输出: 结构化JSON格式的解析结果");
69 }
70}