1 个稳定版本
1.0.0 | 2023年9月19日 |
---|
#45 in #changelog
9KB
alterable_logger
这个包实现了一个对广泛使用的 "log" 包的轻量级封装,增加了在运行时替换正在使用的日志实现的功能。这允许在性能损失很小的情况下使用更多样化的日志功能。
运行时重新配置实现基于 Arc、ArcSwap 和 Box,因此这个包只支持 std 环境。
使用说明(来自 examples/usage/src/main.rs 的摘录)
use log::LevelFilter;
use simplelog::{SimpleLogger, Config};
fn main() {
log::error!("You should not see this!");
// Register a basic logger with maximum filter level warn
let logger = SimpleLogger::new(LevelFilter::Warn, Config::default());
alterable_logger::configure(LevelFilter::Error, logger);
log::error!("You should see this!");
log::warn!("But this is invisible!");
// Change the log level to warning
alterable_logger::set_max_level(LevelFilter::Warn);
log::warn!("You should see this!");
// Change the log level to info (this will be not visible as the logger does not support it)
alterable_logger::set_max_level(LevelFilter::Info);
log::info!("But this is invisible!");
// Replace current logger with a logger that supports a more verbose logging
let logger = SimpleLogger::new(LevelFilter::Info, Config::default());
alterable_logger::set_boxed_logger(logger);
log::info!("You should see this!");
}
提示
尽管 alterable_logger 支持更改日志实现,但它必须是应用程序的第一个注册的日志器。否则,日志注册将静默失败,第一个注册的日志器将保持为正在使用的日志器。
性能
日志设施是全局注册的,这使得在单个应用程序中针对 "log" 设施和 "alterable_logger" 进行性能分析变得困难。为了大致估计 alterable_logger 引入的性能损失,提供了两个示例应用程序。
以下是结果
Log profiling test program
--------------------------
Log info messages 1000000 times
Total operation time: 265876362ns
Operation time per cycle: 265ns
Alterable_logger profiling test program
---------------------------------------
Log info messages 1000000 times
Total operation time: 647119571ns
Operation time per cycle: 647ns
与默认日志器相比,alterable_logger 的间接引用和锁定增加了操作时间超过 2 倍。在实际应用程序中,这不应该很重要,因为大多数日志实现都执行 I/O 密集型操作,这些操作引入了更多开销。
依赖关系
~320KB