#log-file #pattern #processing #java #ruby #composable #unstructured

grok

流行Java & Ruby grok库的Rust实现,允许使用可组合的模式轻松处理文本和日志文件

11个版本 (5个稳定版本)

2.0.0 2022年6月7日
1.2.0 2021年3月12日
1.1.0 2019年10月30日
1.0.0 2019年3月28日
0.4.1 2017年11月15日

#288文本处理

Download history 3829/week @ 2024-03-14 3471/week @ 2024-03-21 3291/week @ 2024-03-28 3864/week @ 2024-04-04 3489/week @ 2024-04-11 3235/week @ 2024-04-18 3034/week @ 2024-04-25 3281/week @ 2024-05-02 4250/week @ 2024-05-09 4282/week @ 2024-05-16 4131/week @ 2024-05-23 3775/week @ 2024-05-30 3589/week @ 2024-06-06 4042/week @ 2024-06-13 3418/week @ 2024-06-20 2919/week @ 2024-06-27

14,541 每月下载量
6 个crates (5个直接使用)

Apache-2.0

32KB
585

grok

grok库允许您快速解析和将可能无结构的文件解析为结构化的结果。它在解析各种类型的日志文件时特别有用。这个Rust版本主要是由Java版本移植而来,而Java版本则受到了Ruby版本的启发。

License Latest Version Documentation Continuous Integration

使用方法

将以下内容添加到您的Cargo.toml

[dependencies]
grok = "2.0"

以下是一个简单的例子,它存储一个模式,编译它,然后在上面匹配一行

use grok::Grok;

fn main() {
    // Instantiate Grok
    let mut grok = Grok::default();

    // Add a pattern which might be a regex or an alias
    grok.add_pattern("USERNAME", r"[a-zA-Z0-9._-]+");

    // Compile the definitions into the pattern you want
    let pattern = grok
        .compile("%{USERNAME}", false)
        .expect("Error while compiling!");

    //  Match the compiled pattern against a string
    match pattern.match_against("root") {
        Some(m) => println!("Found username {:?}", m.get("USERNAME")),
        None => println!("No matches found!"),
    }
}

请注意,编译模式是一个昂贵的操作,所以和普通的正则表达式处理一样,应该只执行一次编译操作,然后可以在循环或迭代器中重复调用模式上的match_against方法。返回的模式并不绑定到原始grok实例的生命周期,因此它可以自由传递。为了性能原因,返回的Match绑定到模式的生命周期,所以请将它们放在一起或根据需要克隆/复制包含的结果。

更多信息

此库依赖于onig进行正则表达式执行,而onig本身是强大的Oniguruma正则表达式库的Rust绑定。如果您不确定为什么特定的正则表达式不起作用,这是查找更多信息的最佳位置,例如支持哪些模式以及如何使用高级功能。

许可证

grok在Apache License(版本2.0)的条款下分发。有关详细信息,请参阅LICENSE。

依赖关系

~3MB
~96K SLoC