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 编码
518 每月下载量
用于 log4rs-gelf
28KB
255 代码行
serde_gelf
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