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
每月下载量 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