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 在 调试 中
每月下载量 238,459
用于 189 个crate (145直接使用)
350KB
6.5K SLoC
flexi_logger
一个灵活且易于使用的日志记录器,可以将日志写入stderr以及/或文件,以及/或其他输出流,并在程序运行时受到影响。
用法
将 flexi_logger
和 log
添加到项目 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或文件
- 配置日志文件的路径和文件名
- 使用文件轮转
- 指定日志行的格式
- 在真正写入日志行之前应用有状态的过滤器
- 定义额外的日志流,例如警报或安全消息
- 支持在程序运行时动态更改日志规范
查看
- 模块 code_examples 的文档,其中包含许多示例
- API文档,提供完整的参考
最小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_stdout
、log_to_stderr
和 log_to_file
兼容。关于一些写入模式性能的比较,请参阅这里。
添加了对 crossbeam-channel
和 crossbeam-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."}
添加了对 serde
、serde_derive
和 serde_json
的依赖。
kv
如果您使用 log
仓库的 kv
功能来丰富日志宏调用中的键值对,那么您也应该使用 flexi_logger
的 kv
功能,以便这些键值对也可以由提供的格式化函数写入。
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