5个版本 (2个稳定版)

使用旧的Rust 2015

2.0.0 2017年4月30日
1.0.0 2016年2月15日
0.99.0 2016年2月15日

#34 in #log-parser

Apache-2.0

45KB
968 代码行

#ELP - AWS ELB访问日志解析器

ELP是一个简单的AWS ELB访问日志解析器。

有关更多信息,请参阅访问日志文档

友好待人,向他人学习。

本项目支持Rust行为准则

文档

##如何使用

此处有一个ELP在生产环境中使用的完整示例。

将ELP添加为依赖项。在您的Cargo.toml中添加以下内容:

[dependencies]
elp = "1.0.0"

然后将其作为外部crate在您的代码中引用。

extern crate elp;

以下是一个使用ELP工具方法获取目录中所有ELB访问日志路径(递归)并将解析结果写入stdout的简短程序。

extern crate elp;

fn main() {
  let mut filenames = Vec::new();

  // Get a list of files from a directory specified by the user.
  match elp::file_list(log_location, &mut filenames) {
      // If walking the directory succeeds
      Ok(_) => {
          // Attempt to parse each record in each file passing the result to
          // a user defined result handler.
          elp::process_files(&filenames, &mut |parsing_result: ParsingResult| {
              println!("{:?}", parsing_result);
          });

          std::process::exit(0);
      },

      Err(e) => {
          println!("The following error occurred while trying to get the list of files. {}", e);
          std::process::exit(1);
      },
}

这部分主要是标准的Rust代码。值得注意的唯一ELP特定代码是处理器。

尝试解析每条记录。每个记录尝试解析的结果将传递给用户定义的处理函数,其函数签名如下。

FnMut(ParsingResult) -> ()

检查错误由用户负责。

为什么使用处理器而不是返回Vec或其他ELBRecord集合?

如果您运行流量大的ELB,您每天可以轻松地生成数百万条记录。在内存中存储记录并返回它们对于高负载ELB来说不可行。通过提供每个记录都将传递的处理程序,用户可以决定如何处理每个记录,无论是将其存储在内存中还是写入磁盘。

依赖项

~2.5MB
~41K SLoC