#json-log #tracing #log-line #logging #json-format #log-format #elastic

tracing-ecs

输出 ECS (Elastic Common Schema) JSON 日志行的追踪订阅者

6 个版本

0.4.0 2024年2月27日
0.3.1 2023年10月3日
0.2.3 2023年9月29日
0.1.0 2023年9月28日

#506数据库接口

每月 33 次下载

MIT/Apache

41KB
840

tracing-ecs crates.io docs.rs

输出与 ECS (Elastic Common Schema) 日志格式兼容的 json 日志行的追踪订阅者。

用法

use tracing_ecs::ECSLayerBuilder;
ECSLayerBuilder::default()
    .stdout()
    .install()
    .unwrap()

许可证

贡献

除非您明确声明,否则根据 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