#serde #logs #gelf

serde_gelf

使用 serde 进行 GELF 序列化

5 个版本

0.1.6 2019年7月8日
0.1.5 2019年6月25日
0.1.4 2019年6月24日
0.1.3 2019年5月14日
0.1.2 2019年5月14日

#1478 in 编码

Download history 155/week @ 2024-04-07 147/week @ 2024-04-14 191/week @ 2024-04-21 120/week @ 2024-04-28 95/week @ 2024-05-05 244/week @ 2024-05-12 265/week @ 2024-05-19 171/week @ 2024-05-26 258/week @ 2024-06-02 64/week @ 2024-06-09 140/week @ 2024-06-16 126/week @ 2024-06-23 94/week @ 2024-06-30 151/week @ 2024-07-07 110/week @ 2024-07-14 161/week @ 2024-07-21

518 每月下载量
用于 log4rs-gelf

BSD-3-Clause

28KB
255 代码行

serde_gelf

Build Status Latest version Documentation License

Graylog 扩展日志格式 (GELF) 是一种结构化日志格式表示,可以以 JSON 字符串的形式通过网络发送。

快速入门

在您的 Cargo.toml 中添加

[dependencies]
serde-value = "0.6"
serde_derive = "1.0"
serde_gelf = "0.1"
serde_json = "1.0"

创建一个实现 Serialize 特性的结构体

#[macro_use]
extern crate serde_derive;
extern crate serde_gelf;
extern crate serde_json;
extern crate serde_value;

use std::collections::BTreeMap;

#[derive(Serialize)]
struct SubFoo {
    sa: String,
    sb: isize,
}

#[derive(Serialize)]
struct Foo {
    a: u32,
    b: String,
    c: Vec<bool>,
    d: BTreeMap<String, serde_value::Value>,
    e: SubFoo,
}

fn main() {
    let foo = Foo {
        a: 15,
        b: "hello".into(),
        c: vec![true, false],
        d: {
            let mut map = BTreeMap::new();
            map.insert("k1".to_string(), serde_value::Value::F64(5.9));
            map.insert("k2".to_string(), serde_value::Value::Bool(false));
            map
        },
        e: SubFoo { sa: "test".to_string(), sb: 5 },
    };
    println!("{}", serde_json::to_string_pretty(& serde_gelf::to_flat_dict(&foo).unwrap()).unwrap());
}

输出:

{
  "_a": 15,
  "_b": "hello",
  "_c_0": true,
  "_c_1": false,
  "_d_k1": 5.9,
  "_d_k2": false,
  "_e_sa": "test",
  "_e_sb": 5
}

OVH 日志数据平台 (LDP)

为了发送特殊类型,如数字或布尔值,LDP 使用后缀作为 命名约定 以强制 ES 类型

后缀 ES 类型 关于
_double double 无符号数字
_float double 浮点值,在 java 表示中为双精度:64 位 IEEE 754 浮点数
_long long 64 位有符号长整型,其最小值为 -263,最大值为 263-1
_bool boolean 预期值:"true" 或 "false"。WARNING: GELF 不支持布尔类型,您将不得不将 "true" 或 "false" 发送为字符串
其他所有内容 String 其他所有内容都将被视为字符串

要启用后缀,请更新 Cargo.toml 并设置 ovh-ldp 功能

serde_gelf = { version = "0.1", features = ["ovh-ldp"] }
# or
[dependencies.serde_gelf]
version = "0.1"
features = ["ovh-ldp"]

现在上一个示例的输出将是

{
  "_a_double": 15,
  "_b": "hello",
  "_c_0_bool": true,
  "_c_1_bool": false,
  "_d_k1_float": 5.9,
  "_d_k2_bool": false,
  "_e_sa": "test",
  "_e_sb_long": 5
}

此库提供了一个宏 gelf_record!,用于根据 GELF 负载规范创建 GELF 记录。

要启用宏,只需在 crate 导入时激活宏

#[macro_use]
extern crate serde_gelf;
extern crate serde_json;

fn main() {
    let rec = gelf_record!("hello");
    println!("{}", serde_json::to_string_pretty(&rec).unwrap());
}

输出:

{
  "facility": "src",
  "file": "examples/src/main.rs",
  "host": "myhostname",
  "level": 1,
  "_levelname": "Alert",
  "line": 11,
  "short_message": "hello",
  "timestamp": 1554980878.241851,
  "version": "1.1"
}

许可证

BSD 3-Clause 许可证 或 (https://opensource.org/licenses/BSD-3-Clause) 下许可

依赖关系

~1–2.3MB
~46K SLoC