10个版本 (4个稳定版)
4.0.0 | 2024年6月3日 |
---|---|
3.0.0 | 2022年10月12日 |
2.0.0 | 2022年7月19日 |
1.0.0 | 2022年3月16日 |
0.1.0 | 2019年11月21日 |
#146 in 调试
每月下载量 6,751
在 4 个crate中 使用 (直接使用3个)
53KB
1K SLoC
Witchcraft服务器结构化日志门面。
witchcraft-log
的结构与标准的Rust log
crate非常相似。它在库与可执行文件中的使用、日志级别等都是基本相同的。然而,witchcraft-log
在一些关键方面与log
有所不同。
结构化日志
Witchcraft的日志是结构化的。它不是通过将运行时信息插值到日志消息中来包含信息,而是通过一组单独的参数来包含信息。参数分为“安全”参数和“不安全”参数。在此上下文中,“安全”不是指传统的Rust内存安全,而是指防止信息泄露。安全参数不包含任何关于服务使用的敏感信息,并且可以从特定环境中提取出来,而不安全参数包含敏感信息,这些信息根本不应该离开环境。例如,处理请求使用的内存量可能是一个安全参数,而执行请求的用户信息可能是一个不安全参数。
参数可以是任意serde
-可序列化值。但是请注意,日志记录器通常会序列化参数为JSON,因此不建议使用无法序列化为JSON的值。
日志记录中的所有动态信息都应通过参数表示。实际上,Witchcraft-log要求日志消息为静态字符串 - 不能进行任何类型的插值。这意味着消息本身始终可以被认为是安全的。
示例
// with the standard log crate
log::info!("ran a request for {} using {} bytes of memory", user_id, memory_overhead);
// with the witchcraft-log crate
witchcraft_log::info!("ran a request", safe: { memory: memory_overhead }, unsafe: { user: user_id });
错误
此外,一个 conjure_error::Error
可以与日志消息相关联。由于许多日志是由错误引起的,这允许自动将更多关于错误的信息(例如其堆栈跟踪)包含在记录中。
示例
if let Err(e) = shave_a_yak(my_yak) {
witchcraft_log::warn!("error shaving a yak", safe: { yak: my_yak }, error: e);
}
桥接
即使应用程序正在使用 witchcraft-log
,它的许多依赖项仍然可能使用 log
crate。bridge
模块提供了将 log
crate 的记录转发到 witchcraft-log
的功能。
依赖项
~6–13MB
~141K SLoC