#pattern #log-file #java #ruby #processing #grok #port

fgrok

流行的Java & Ruby grok库的Rust实现,允许使用可组合的模式轻松处理文本和日志文件。 (从 https://github.com/daschl/grok 分支)

1 个稳定版本

使用旧的Rust 2015

1.1.0 2020年5月23日

#5#grok


用于 grop

Apache-2.0

32KB
510

grok

grok 库允许您快速解析和匹配可能无结构的数据到结构化结果。它在解析各种日志文件时特别有用。这个 Rust 版本主要是从 Java 版本 移植而来,而该版本又从原始的 Ruby 版本 中汲取灵感。

License Latest Version Documentation

Build Status Build status

用法

将此添加到您的 Cargo.toml

[dependencies]
grok = "1.1"

并将此添加到您的crate根目录

extern crate grok;

以下是一个简单示例,它存储一个模式,编译它,然后将其与一行匹配

extern crate grok;

use grok::Grok;

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

    // Insert a definition which might be a regex or an alias
    grok.insert_definition("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 绑定到模式的生命周期,因此请将它们放在一起或根据需要克隆/复制包含的结果。

许可证

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

依赖关系

~3MB
~96K SLoC