#logging #log #logger

fern

简单、高效的日志记录

38 个版本

0.6.2 2023 年 3 月 23 日
0.6.1 2022 年 4 月 15 日
0.6.0 2020 年 3 月 9 日
0.5.9 2019 年 10 月 23 日
0.1.3 2014 年 12 月 28 日

#13调试 类别中

Download history 79536/week @ 2024-04-08 108959/week @ 2024-04-15 103402/week @ 2024-04-22 86495/week @ 2024-04-29 84328/week @ 2024-05-06 97854/week @ 2024-05-13 120318/week @ 2024-05-20 97973/week @ 2024-05-27 100490/week @ 2024-06-03 111959/week @ 2024-06-10 96062/week @ 2024-06-17 93330/week @ 2024-06-24 84327/week @ 2024-07-01 92221/week @ 2024-07-08 84504/week @ 2024-07-15 85441/week @ 2024-07-22

每月下载量352,104
484 包使用 (直接使用 358 个)

MIT 许可

305KB
2K SLoC

fern

crates.io version badge Build Status Average time to resolve an issue

为 Rust 提供简单、高效的日志记录。


fern 0.4.4, 0.5.*, 0.6.* 安全警告 - colored 功能 + 全局分配器

我们的一个下游依赖库 atty 通过 colored 存在着一个不安全性问题: https://rustsec.org/advisories/RUSTSEC-2021-0145.html

这种情况会出现在以下情况下:如果您正在使用 colored(包或我们的功能)和自定义的全局分配器。

我将发布 fern 0.7.0,移除 colored 作为依赖项。这可能会添加另一个颜色包,或者只是记录使用替代方案(如 owo-colors + enable-ansi-support)的使用。

在此期间,如果您正在使用 #[global_allocator],我强烈建议移除 fern/colored 功能。

或者,为了最小化代码更改,您还可以启用 colored/no-colors 功能

cargo add colored --features no-color

使用 no-color 功能,受影响的代码仍然存在,但除非您手动使用以下任何 API,否则它将不会被调用

有关进一步讨论,请参阅https://github.com/daboross/fern/issues/113


日志配置是递归分支的,就像蕨类植物:格式化、过滤器输出可以递归应用于匹配越来越具体的日志类型。Fern为Rust标准log crate提供基于构建器的配置支持。

//! With fern, we can:

// Configure logger at runtime
fern::Dispatch::new()
    // Perform allocation-free log formatting
    .format(|out, message, record| {
        out.finish(format_args!(
            "[{} {} {}] {}",
            humantime::format_rfc3339(std::time::SystemTime::now()),
            record.level(),
            record.target(),
            message
        ))
    })
    // Add blanket level filter -
    .level(log::LevelFilter::Debug)
    // - and per-module overrides
    .level_for("hyper", log::LevelFilter::Info)
    // Output to stdout, files, and other Dispatch configurations
    .chain(std::io::stdout())
    .chain(fern::log_file("output.log")?)
    // Apply globally
    .apply()?;

// and log using log crate macros!
info!("hello, world!");

所有功能的示例请参阅API文档。使用此示例命令行程序查看Fern的使用情况。


项目状态

Fern项目主要是由GitHub上的我自己,@daboross维护的。这是一个业余项目,但我希望保持其高质量。

贡献

由于这是一个业余项目,因此非常欢迎贡献!

目前,您可以通过在应用程序中使用Fern来贡献,并查看其不足之处。当前的库有一个坚实的基础,但它缺少功能,并且我可能无法预见到您的用例。

如果您有一个Fern未涵盖的用例,请提交问题。如果您实现了该功能,这将对我、希望为该项目做出贡献的人以及您自己都非常有用。

如果您有兴趣帮助修复一个现有问题或您刚刚提交的问题,将非常感谢您的帮助。

有关贡献的详细信息,请参阅CONTRIBUTING

依赖项

~0–8.5MB
~65K SLoC