2个版本
0.1.0-alpha.2 | 2022年5月28日 |
---|---|
0.1.0-alpha.1 | 2022年5月27日 |
#658 在 调试 中
79 每月下载次数
96KB
2K SLoC
tracing-filter
结构化跟踪记录的过滤/查询系统。
仍在开发中。 功能状态各不相同。
目前仅针对收集的事件进行过滤。然而,我 希望 也支持过滤记录的事件。
过滤器
当你构建一个 Filter
类型时,你确定它支持哪种类型的过滤器。你不能在一个过滤层中混合不同类型的过滤器。
请注意,复杂的过滤器可能会降低你的跟踪性能,因此通常不建议使用不受信任(即用户)来源的过滤器。这对于旧版和查询过滤器尤为重要;因为它们使用 regex-automata 来实现无缓冲的正则表达式过滤,因此容易受到无界正则表达式编译时间的影响,类似于 CVE-20222-24713。简单的过滤器不进行无缓冲的正则表达式评估,因此直接使用正则表达式crate,这已经缓解了这个问题。
简单过滤器
tracing-filter与env_logger的过滤器语法99.999%兼容。因此,你可以像以前一样编写简单的过滤器
warn
— 过滤出级别为WARN
或ERROR
的事件my_app=debug
— 仅过滤出来自my_app
的DEBUG
或更高级别的事件warn,my_app::module=trace
— 获取警告事件并跟踪my_app::module
off
— 禁用所有日志debug/foo
— 过滤出包含 "foo
" 的DEBUG
或更高级别的事件
通常,语法是 target=level/regex
。如果一个事件的目标 以 列出的 target
开头,其级别通过了 level
过滤器,并且其消息与 regex
匹配,则该事件将被包含。使用 env_logger crate 时,如果不启用 regex
功能,正则表达式字符串是简单的子字符串匹配;使用我们简单的过滤器,
这应该在 tracing_filter::simple
模块中达到 99% 的功能性。
†:tracing 还不允许根据事件字段的内容进行过滤 目前还不允许。tracing-filter 选择暂时静默忽略正则表达式过滤器(但确实验证了过滤器)。
旧版过滤器
[email protected] 的 EnvFilter
支持的过滤器语法,包括其所有独特的 "peculiarites"(特性);100% 的 bug-for-bug 兼容。
因此,您可以继续使用所有之前使用的过滤器
warn
— 过滤出级别为WARN
或ERROR
的事件my_app=debug
— 仅过滤出来自my_app
的DEBUG
或更高级别的事件warn,my_app::module=trace
— 获取警告事件并跟踪my_app::module
off
— 禁用所有日志[span]=debug
— 在名为span
的跨度内过滤DEBUG
或更高的事件[{field}]
— 过滤具有字段field
或在具有名称field
的跨度内的事件[{key=val}]
— 过滤具有字段key
且与正则表达式val
匹配的事件[{key=0}]
— 过滤具有字段key
且记录的数字等于0
[{key=true}]
— 过滤具有字段key
且记录的布尔值为true
target[span]
— 过滤具有目标target
和名称span
的跨度内的事件
通常,语法是 target[span{field=value}]=level
。
这应该在 tracing_filter::legacy
模块中达到 100% 的功能性。
查询过滤器
查询过滤器是 tracing-filter 选择事件并利用 tracing 的结构化事件的途径。查询过滤器是简单过滤器的 99% 子集;具体来说,对于每个由 ,
分隔的指令,如果它以 (
开头,则它被视为查询过滤器;否则,它被视为简单过滤器。
这仍在进行设计工作。
为什么不使用 tracing-filter?
- tracing-filter 非常实验性
- tracing-filter 不受 tracing 团队官方支持
- tracing-filter 未发布到 crates-io
- tracing-filter 与未发布的 tracing 0.2.0 生态系统一起工作
为什么使用 tracing-filter?
- 比 [email protected] 的
EnvFilter
更可配置 - 您希望您的运行时过滤器语法能够适用于序列化事件查询
- 您喜欢作者,并希望他们为自己感到骄傲
- 我们有漂亮的由 miette 驱动的错误 😄
依赖项
~12MB
~208K SLoC