6 个版本
0.4.0 | 2024年2月27日 |
---|---|
0.3.1 | 2023年10月3日 |
0.2.3 | 2023年9月29日 |
0.1.0 |
|
#506 在 数据库接口
每月 33 次下载
41KB
840 行
tracing-ecs
输出与 ECS (Elastic Common Schema) 日志格式兼容的 json 日志行的追踪订阅者。
用法
use tracing_ecs::ECSLayerBuilder;
ECSLayerBuilder::default()
.stdout()
.install()
.unwrap()
许可证
- Apache 许可证2.0版本 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义,您有意提交的任何贡献都应双许可如上所述,没有任何附加条款或条件。
lib.rs
:
输出与 ECS (Elastic Common Schema) 兼容的 json 日志行的追踪订阅者。
更具体地说,这个 crate 提供了一个可以与来自 tracing-subscribers
crate 的现有 Subscriber
组合的 Layer
实现。
查看如何实现 install
方法以了解底层执行了什么。
处理跨度的方式
所有跨度属性都直接附加到最终的 json 对象中。
因此,如果静态额外字段与某些跨度属性有相同的键,或者如果属性名为 message
(这应保留给日志事件),则最终 json 可能会有重复的键。
此行为可以通过实现AttributeMapper
特质进行自定义。
JSON 规范化
默认情况下,输出会被规范化,因此结果 json 键中不再包含点。请参阅https://elastic.ac.cn/guide/en/ecs/current/ecs-guidelines.html
请参阅ECSLayerBuilder.normalize_json
示例
安装一个默认的订阅者,输出 json 到标准输出
use tracing_ecs::ECSLayerBuilder;
ECSLayerBuilder::default()
.stdout()
.install()
.unwrap()
安装一个带有自定义额外字段的订阅者,输出 json 到标准输出(这里我们使用 json!
宏,但它接受任何可以序列化为 json 映射的内容)
use serde_json::json;
use tracing_ecs::ECSLayerBuilder;
ECSLayerBuilder::default()
.with_extra_fields(json!({
"labels": {
"env": "prod",
},
"tags": ["service", "foobar"]
}))
.unwrap()
.stdout()
.install()
.unwrap();
带有属性名称映射
use tracing_ecs::ECSLayerBuilder;
use std::borrow::Cow;
use std::ops::Deref;
ECSLayerBuilder::default()
.with_attribute_mapper(
|_span_name: &str, name: Cow<'static, str>| match name.deref() {
"txid" => "transaction.id".into(),
_ => name,
},
).stdout().install().unwrap()
依赖项
~5.5–8MB
~140K SLoC