3 个稳定版本

2.0.0 2020年1月11日
1.0.1 2019年8月6日
1.0.0 2019年8月5日

#2 in #wants

MIT/Apache

12KB
119 代码行(不含注释)

logtea

LICENSE License Build Status Crates.io Version Minimum rustc version

这是一个用于与 rettle ETL 一起使用的通用 LOG 文件填充成分库。该库使用 nom 作为解析库,允许任何项目通过提供自定义构建的解析器来自定义解析日志的方式。

数据结构

  • FillLogArg: FillLogTea 的成分参数
  • FillLogTea: 用于在 rettle 锅中简化创建填充成分的包装器

示例

#[derive(Default, Clone, Debug)]
struct LogTea {
    log_type: String,
    datetime: String,
    msg: String,
}

impl Tea for LogTea {
    fn as_any(&self) -> &dyn Any {
        self
    }
}

// Custom parser setup.
fn log_type(input: &str) -> IResult<&str, &str> {
    delimited(char('['), is_not("]"), char(']'))(input)
}

fn datetime(input: &str) -> IResult<&str, &str> {
    take(19u8)(input)
}

fn msg(input: &str) -> IResult<&str, &str> {
    not_line_ending(input)
}

fn parse_log(input: &str) -> IResult<&str, LogTea> {
    // Parse log attributes.
    let (input, log_type) = log_type(input)?;
    let (input, _) = tag(" - ")(input)?;
    let (input, datetime) = datetime(input)?;
    let (input, _) = space1(input)?;
    let (input, msg) = msg(input)?;

    // Convert &str to String
    let log_type = String::from(log_type);
    let datetime = String::from(datetime);
    let msg = String::from(msg);
    Ok((input, LogTea { log_type, datetime, msg }))
}

fn main() {
    let test_fill_logarg = FillLogArg::new("fixtures/log.LOG", 50, parse_log);

    let brewery = Brewery::new(4, Instant::now());
    let fill_logtea = FillLogTea::new::<LogTea>("log_tea_source", "log_fixture", test_fill_logarg);

    let new_pot = Pot::new()
        .add_source(fill_logtea);

    // Steep/Pour operations of choice

    new_pot.brew(&brewery);
}

依赖项

~1.4–2.3MB
~49K SLoC