#log-line #logger #logging #file #output-stream

flexi_logger

一个易于配置且灵活的日志记录器,可以将日志写入stderr或stdout以及/或文件。它允许自定义日志行格式,并允许在运行时更改日志规范。它还允许定义额外的日志流,例如警报或安全消息。

124次发布

0.28.5 2024年6月21日
0.28.0 2024年3月16日
0.27.3 2023年11月10日
0.25.6 2023年7月28日
0.3.1 2015年7月31日

#7调试

Download history 58914/week @ 2024-05-03 53666/week @ 2024-05-10 68055/week @ 2024-05-17 65256/week @ 2024-05-24 67694/week @ 2024-05-31 60700/week @ 2024-06-07 59770/week @ 2024-06-14 67557/week @ 2024-06-21 63949/week @ 2024-06-28 59985/week @ 2024-07-05 67805/week @ 2024-07-12 60174/week @ 2024-07-19 64519/week @ 2024-07-26 58064/week @ 2024-08-02 58282/week @ 2024-08-09 45461/week @ 2024-08-16

每月下载量 238,459
用于 189 个crate (145直接使用)

MIT/Apache

350KB
6.5K SLoC

flexi_logger

一个灵活且易于使用的日志记录器,可以将日志写入stderr以及/或文件,以及/或其他输出流,并在程序运行时受到影响。

Latest version Documentation License Build unsafe forbidden

用法

flexi_loggerlog 添加到项目 Cargo.toml 中的依赖部分(需要 log 因为 flexi_logger 集成到Rust标准日志封装库,您使用 log 宏从代码中写入日志行)

[dependencies]
flexi_logger = "0.28"
log = "0.4"

要使用环境变量 RUST_LOG 提供日志规范并将日志写入stderr,请在main的早期位置添加

flexi_logger::init();

或者,要程序化地提供默认日志规范,使用

flexi_logger::Logger::try_with_env_or_str("info, my::critical::module=trace")?.start()?;

或者,要将日志写入例如性能较高的文件,

use flexi_logger::{FileSpec, Logger, WriteMode};

let _logger = Logger::try_with_str("info, my::critical::module=trace")?
    .log_to_file(FileSpec::default())
    .write_mode(WriteMode::BufferAndFlush)
    .start()?;

还有许多其他配置选项,例如

  • 决定您是否要将日志写入stdout或文件
  • 配置日志文件的路径和文件名
  • 使用文件轮转
  • 指定日志行的格式
  • 在真正写入日志行之前应用有状态的过滤器
  • 定义额外的日志流,例如警报或安全消息
  • 支持在程序运行时动态更改日志规范

查看

最小rust版本

目前支持的最小Rust版本是 "1.70.0"。

crate功能

通过在 Cargo.toml 中指定它们来使用非默认功能,例如。

[dependencies]
flexi_logger = { version = "0.28", features = ["async", "specfile", "compress"] }
log = "0.4"

或者,要获得最小的占用空间(且没有颜色),即使关闭默认功能

[dependencies]
flexi_logger = { version = "0.28", default_features = false }
log = "0.4"

异步

添加了一种额外的写入模式,该模式将 flexi_logger 的 I/O 与您的应用程序线程解耦。与 log_to_stdoutlog_to_stderrlog_to_file 兼容。关于一些写入模式性能的比较,请参阅这里

添加了对 crossbeam-channelcrossbeam-queue 的依赖。

colors(默认功能)

即使没有这个功能,也可以通过实现和使用自己的颜色格式函数来获得带颜色的输出。

默认功能 colors 通过以下三件事简化了这一点

  • 它激活了对 nu_ansi_term 的可选依赖
  • 并为现有的未着色格式函数提供了额外的彩色附件
  • 它为 stderr 的输出使用 colored_default_format,而对于文件输出则使用非彩色的 default_format
  • 如果输出不是发送到终端,而是例如通过管道发送到另一个程序,则关闭着色。

Colors 或风格通常是个人喜好,没有选择可以满足每个人的需求。因此,您可以通过各种方式覆盖默认的格式化和着色。

通过关闭默认功能(见 使用方法),您可以移除基于 nu_ansi_term 的着色,但保留关闭您自己的着色的能力。

压缩

enum Logger::Cleanup 中添加了两种变体,允许将一些或所有旋转的日志文件以压缩形式(.gz)保留,而不是作为纯文本文件。

不最小化额外堆栈

通常,flexi_logger 会将可能产生的所有线程(刷新器、specfile 监视器、异步写入器、清理)的堆栈大小减少到最低限度。对于不希望这样做的用例(见 这里 的某些动机),您可以激活此功能。

json

添加了一个额外的格式化函数 json_format,它以 JSON 格式打印整个日志行,如下所示

{"level":"WARN","timestamp":"2024-03-14 10:04:57.299908 +01:00","thread":"XY","module_path":"test_json","file":"src/test_json.rs","line":32,"text":"More foo than bar."}

添加了对 serdeserde_deriveserde_json 的依赖。

kv

如果您使用 log 仓库的 kv 功能来丰富日志宏调用中的键值对,那么您也应该使用 flexi_loggerkv 功能,以便这些键值对也可以由提供的格式化函数写入。

specfile

添加了一个方法 Logger::start_with_specfile(specfile)

如果使用此方法启动,flexi_logger将使用工厂方法(例如Logger::with...())提供的日志规范作为初始规范,然后尝试从命名文件中读取日志规范。

如果文件不存在,则创建该文件并用初始规范填充。

在程序运行时编辑文件中的日志规范,可以实时更改日志行为。

此功能的实现使用了一些额外的crate,如果您不使用此功能,可能不希望将它们与您的程序一起依赖。因此,默认情况下不激活此功能。

specfile_without_notification

specfile非常相似,但是会忽略文件的更新。有关更多详细信息,请参阅此处

syslog_writer

添加了SyslogWriter,这是一个将日志条目发送到syslog的LogWriter实现。

textfilter (默认功能)

添加了通过文本过滤日志的功能,但也添加了对regex crate的依赖。

trc

这是一个实验性功能,允许使用flexi_logger功能与tracing一起使用。

版本

有关更多详细信息,请参阅变更日志

依赖项

~1–32MB
~424K SLoC