4 个版本

0.1.3 2021年2月2日
0.1.2 2021年1月28日
0.1.1 2020年12月22日
0.1.0 2020年11月16日

性能分析 中排名 224

Download history 115/week @ 2024-03-25 160/week @ 2024-04-01 104/week @ 2024-04-08 148/week @ 2024-04-15 150/week @ 2024-04-22 116/week @ 2024-04-29 117/week @ 2024-05-06 116/week @ 2024-05-13 145/week @ 2024-05-20 217/week @ 2024-05-27 154/week @ 2024-06-03 89/week @ 2024-06-10 108/week @ 2024-06-17 104/week @ 2024-06-24 87/week @ 2024-07-01 171/week @ 2024-07-08

每月下载量 485
用于 6 个 Crates (3 直接)

自定义许可证

59KB
1K SLoC

可观察性

结构化上下文日志(或跟踪)

为什么

观看阅读

此包的意图

此包旨在成为实验跟踪和结构化日志想法的地方。此包可能永远不会稳定。相反,我希望将任何好的想法反馈到底层依赖项。

用法

使用结构化日志有两种方法。

控制台和过滤器

如果您想尝试过滤某个问题,最简单的方法可能是直接将日志记录到控制台,并过滤您想要的。以下是一个示例命令:

RUST_LOG='core[a{something="foo"}]=debug' my_bin

或者使用默认的 Log

RUST_LOG=trace my_bin
跟踪类型

此包公开了许多跟踪类型。[Output] 类型旨在与类似 structopt 的工具一起使用,您可以通过命令行参数轻松设置您想要使用的类型。您还可以使用环境变量。在启动时,[Output] 变体会传递到 [init_fmt] 函数。

过滤
RUST_LOG='core[a{something="foo"}]=debug'

这里我们说的是显示以下所有事件:

  • core 模块中
  • 在名为 a 的跨度内
  • 跨度 a 必须有一个名为 something 的字段,该字段等于 foo
  • 它们至少是调试级别。

大多数这些选项都是可选的。它们可以组合使用,如下所示:

RUST_LOG='[{}]=error,[{something}]=debug'

上述意味着显示来自任何地方的错误,以及任何具有至少调试级别的字段 something 的事件或跨度。

有关更多信息,请参阅 此处

JSON

有时数据太多,最好稍后使用其他工具捕获它。为此,我们可以使用标志 --structured Json 将所有内容输出为 JSON。然后您可以将输出从 stdout 管道到您选择的文件。以下是一些示例输出:

{"time":"2020-03-03T08:07:05.910Z","name":"event crates/sim2h/src/sim2h_im_state.rs:695","level":"INFO","target":"sim2h::sim2h_im_state","module_path":"sim2h::sim2h_im_state","file":"crates/sim2h/src/sim2h_im_stat
e.rs","line":695,"fields":{"space_hashes":"[]"},"spans":[{"id":[1099511627778],"name":"check_gossip","level":"INFO","target":"sim2h::sim2h_im_state","module_path":"sim2h::sim2h_im_state","file":"crates/sim2h/src/s
im2h_im_state.rs","line":690}]}

每条日志都将包含上述信息,除非事件上下文中存在父跨度,此时跨度将不会显示。

您还可以将过滤器与Json结合使用。

工具

一些用于格式化和使用Json数据的实用工具。

示例工作流程

RUST_LOG='core[{}]=debug' my_bin --structured Json > log.json
cat out.json | jq '. | {time: .time, name: .name, message: .fields.message, file: .file, line: .line, fields: .fields, spans: .spans}' | json2csv -o log.csv
tad log.csv

依赖关系

~6–14MB
~164K SLoC