#logging-tracing #tracing #logging #json #tracing-subscriber #json-format #structured

tracing_sprout

为初出茅庐的记录器提供的tokio-rs/tracing结构化JSON格式化层

6个版本

0.1.0-alpha.62022年7月10日
0.1.0-alpha.52022年7月9日
0.1.0-alpha.42022年7月6日
0.1.0-alpha.32022年7月2日
0.1.0-alpha.12021年2月13日

调试 中排名第 729

每月下载量 26

MIT 协议

26KB
333 代码行

Tracing Sprout

为初出茅庐的记录器提供的tokio-rs/tracing结构化JSON格式化层

crates.io docs repo MIT

深受 Tracing Bunyan Formatter 启发,只是对内部结构和格式做了一些小的调整。实际的格式化不遵循任何定义的规范,这只是我认为可读且有用的东西 - 如果人们希望它遵循特定的格式,我持开放态度。

功能

  • 所有跟踪都会接收到其父级的属性以及自己的属性,如果发生冲突,子级属性将具有优先级
  • 有一个非常基础的计时能力,将经过的时间添加到 EVENTEXIT 跟踪中
  • TRACEDEBUGERROR 日志附加了一些额外的元数据 (文件名、行号、模块路径 & 目标)
  • 避免恐慌 - 尽可能地通过 eprintln 将失败输出到 stdout。这些场景应该是少数,但最好是在您的跟踪实现中失败不会污染您的应用程序。 (尽管理想情况下它不应该静默失败)

所有跟踪都会接收到其父级的属性以及自己的属性,还有一个非常基础的计时能力,将经过的时间添加到 EventExit 跟踪中

基本示例

请参阅 /examples 以查看更复杂的示例

use tracing::{subscriber::set_global_default, Subscriber};
use tracing_sprout::TrunkLayer;
use tracing_subscriber::prelude::*;
use tracing_subscriber::{EnvFilter, Registry};

let env_filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
let formatting_layer = TrunkLayer::new("My Application".to_string(), env!("CARGO_PKG_VERSION").to_string(), std::io::stdout);
let subscriber = Registry::default()
     .with(env_filter)
     .with(formatting_layer);

set_global_default(subscriber).expect("failed to set up global tracing subscriber")

示例输出

原始JSON

{"name":"I'm Groot","version":"0.1.0-alpha.1","id":"1","time":"Sat, 02 Jul 2022 09:33:59 -0600","msg":"[EPIC MONTAGE | START]","level":"info","span_type":"enter"}
{"name":"I'm Groot","version":"0.1.0-alpha.1","id":"1","group":["Peter Quill","Gamora","Drax","Rocket"],"time":"Sat, 02 Jul 2022 09:33:59 -0600","msg":"[EVENT] Trying to plug in the power","level":"trace","file":"examples/basic.rs","line":32,"target":"basic","thread_id":"ThreadId(1)","thread_name":"main","span_type":"event"}
{"name":"I'm Groot","version":"0.1.0-alpha.1","id":"2","info":"I'm overwriting my parents ID","time":"Sat, 02 Jul 2022 09:33:59 -0600","msg":"[MUSIC IS PLAYING | START]","level":"debug","file":"examples/basic.rs","line":34,"target":"basic","thread_id":"ThreadId(1)","thread_name":"main","span_type":"enter"}

通过CLI工具处理

在这种情况下,使用的CLI工具是 pino-pretty

[Sat, 02 Jul 2022 09:34:55 -0600] INFO (I'm Groot): [EPIC MONTAGE | STA
    version: "0.1.0-alpha.1"
    id: "1"
    span_type: "enter"
[Sat, 02 Jul 2022 09:34:55 -0600] TRACE (I'm Groot): [EVENT] Trying to
    version: "0.1.0-alpha.1"
    id: "1"
    group: [
      "Peter Quill",
      "Gamora",
      "Drax",
      "Rocket"
    ]
    file: "examples/basic.rs"
    line: 32
    target: "basic"
    thread_id: "ThreadId(1)"
    thread_name: "main"
    span_type: "event"
[Sat, 02 Jul 2022 09:34:55 -0600] DEBUG (I'm Groot): [MUSIC IS PLAYING | START]
    version: "0.1.0-alpha.1"
    id: "2"
    info: "I'm overwriting my parents ID"
    file: "examples/basic.rs"
    line: 34
    target: "basic"
    thread_id: "ThreadId(1)"
    thread_name: "main"
    span_type: "enter"
[Sat, 02 Jul 2022 09:34:55 -0600] INFO (I'm Groot): [DANCE | START]
    version: "0.1.0-alpha.1"
    id: "2"
    info: "I'm overwriting my parents ID"
    span_type: "enter"

依赖关系

~2.8–4MB
~65K SLoC