1 个不稳定版本
0.1.0 | 2021 年 9 月 7 日 |
---|
#2371 在 解析器实现
每月 1,583 次下载
21KB
400 行
支持用于日志目标过滤器的解析,如 env_logger 和 tracing::EnvFilter 所使用的。
我们始终支持扩展的跟踪格式,即
target[span{field=value}]=level
以下有效性规则
- 所有字段都是可选的,可以省略
- 所有字段不得包含语法字符
[]{}=,"/
- 将来可能会放宽这些规则,以允许例如在
value
中匹配括号和/或引用值
- 将来可能会放宽这些规则,以允许例如在
- 与 env_logger/tracing::EnvFilter 不同,我们将裸露的级别名称视为目标,而不是级别指令
- 将此行为添加回去很简单——检查是否只设置了目标,如果是,则尝试将其作为级别
请注意,这些规则不会删除空白;你可能需要自己这样做。如果你想要进一步的验证,你可以在解析步骤之后添加它。这个 crate 的目的仅仅是为了从格式中提取指令,而不是确保指令在其它方面是良好格式化或有意义的。
不支持的功能
- 与 tracing::EnvFilter 一样,解析是临时的,通常允许通过一些奇怪的边缘情况。我们选择严格,要求语法完全匹配,而不是宽松接受。
- 同样,tracing 允许(有时甚至期望)在字段过滤器值中使用引号。引号目前被保留,以便将来可以添加允许在过滤器字段中包含语法字符的引号语法。
- env_logger 支持一个全局
/regex
指令来通过正则表达式过滤消息。这分别应用于所有其他较早的指令,因此并不完全适合我们所采用的过滤器迭代器设计。然而,我们已经为清晰和这样的目的保留了/
字符,以便将来可能添加具有此语法的过滤器字段。 - tracing::EnvFilter 将 field=value 的值解释为正则表达式。我们明确将这种解释级别留给消费者,因为这个库只是用于解析。