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 调试

Download history 1786/week @ 2024-05-03 1598/week @ 2024-05-10 1749/week @ 2024-05-17 1534/week @ 2024-05-24 1714/week @ 2024-05-31 1688/week @ 2024-06-07 1664/week @ 2024-06-14 1126/week @ 2024-06-21 1696/week @ 2024-06-28 1319/week @ 2024-07-05 1615/week @ 2024-07-12 1479/week @ 2024-07-19 1835/week @ 2024-07-26 1644/week @ 2024-08-02 1718/week @ 2024-08-09 1350/week @ 2024-08-16

每月下载量 6,751
4 个crate中 使用 (直接使用3个)

Apache-2.0

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