48 个版本

0.4.22 2024年6月28日
0.4.21 2024年2月28日
0.4.20 2023年8月12日
0.4.19 2023年6月11日
0.1.5 2014年12月29日

#1 in 调试

Download history 2534910/week @ 2024-05-04 2586186/week @ 2024-05-11 2592332/week @ 2024-05-18 2531742/week @ 2024-05-25 2803570/week @ 2024-06-01 2726732/week @ 2024-06-08 2715615/week @ 2024-06-15 2749847/week @ 2024-06-22 2775889/week @ 2024-06-29 2986752/week @ 2024-07-06 2966463/week @ 2024-07-13 3042998/week @ 2024-07-20 3036523/week @ 2024-07-27 3005426/week @ 2024-08-03 3184908/week @ 2024-08-10 2602158/week @ 2024-08-17

12,327,378 每月下载量
用于 61,007 个 crate(18,218 个直接使用)

MIT/Apache

165KB
3K SLoC

log

提供轻量级日志门面的 Rust 库。

Build status Latest version Documentation License

日志门面提供了一个抽象实际的日志实现的单一日志 API。库可以使用此 crate 提供的日志 API,而这些库的消费者可以选择最适合其用例的日志实现。

最低支持的 rustc

1.60.0+

此版本在 CI 中明确测试,根据需要可能在任何版本中提升。尽管保持与旧编译器的兼容性是优先事项,但提升最低支持版本的门槛设置得非常高。任何对最低支持版本的支持更改将在发行说明中说明。

使用方法

在库中

库应仅链接到 log crate,并使用提供的宏记录对下游消费者有用的任何信息

[dependencies]
log = "0.4"
use log::{info, trace, warn};

pub fn shave_the_yak(yak: &mut Yak) {
    trace!("Commencing yak shaving");

    loop {
        match find_a_razor() {
            Ok(razor) => {
                info!("Razor located: {razor}");
                yak.shave(razor);
                break;
            }
            Err(err) => {
                warn!("Unable to locate a razor: {err}, retrying");
            }
        }
    }
}

在可执行文件中

为了生成日志输出,可执行文件必须使用与门面兼容的日志实现。有多个可用的实现可供选择,以下是一些选项

可执行文件应该在程序运行时早期选择一个日志实现并初始化它。日志实现通常会包括一个用于此目的的函数。在日志实现初始化之前生成的任何日志消息都将被忽略。

可执行文件本身也可以使用 log crate 来进行日志记录。

结构化日志

如果您启用了 kv 功能,您可以将结构化数据与您的日志记录相关联

use log::{info, trace, warn};

pub fn shave_the_yak(yak: &mut Yak) {
    // `yak:serde` will capture `yak` using its `serde::Serialize` impl
    //
    // You could also use `:?` for `Debug`, or `:%` for `Display`. For a
    // full list, see the `log` crate documentation
    trace!(target = "yak_events", yak:serde; "Commencing yak shaving");

    loop {
        match find_a_razor() {
            Ok(razor) => {
                info!(razor; "Razor located");
                yak.shave(razor);
                break;
            }
            Err(e) => {
                // `e:err` will capture `e` using its `std::error::Error` impl
                warn!(e:err; "Unable to locate a razor, retrying");
            }
        }
    }
}

依赖项

~0–265KB