#slog #macro #logger #optional #encapsulate

日志尝试

带有可选slog日志记录器的日志便利宏

6个版本 (3个稳定版本)

1.0.2 2022年12月10日
1.0.1 2021年3月13日
0.2.0 2018年7月2日
0.1.1 2018年3月25日
0.1.0 2017年9月1日

#438 in 调试


6 crates 中使用

MIT/Apache

19KB
391

日志尝试

日志尝试为带有可选slog日志记录器的日志提供了便利宏。

注意 - 请参阅此README的底部,了解另一种使用不需要Option<Logger>的Logger的方法

当前版本

docs.rs Crates.io Crates.io Crates.io codecov CI

必需的依赖项

在您的Cargo.toml文件中将slog-try添加为依赖项。

[dependencies]
slog-try = "1"

项目设置

添加您希望使用的宏的使用语句

use slog_try::try_info;

使用示例

考虑HasOptLogger,这是一个可可选附加日志记录器的数据结构

#[derive(Default)]
struct HasOptLogger {
    logger: Option<Logger>,
}

slog-try中包含的宏封装了使用此日志记录器所需的样板代码,而无需验证可选字段是否实际上包含日志记录器

let mut opt_logger = HasOptLogger { logger: None };

// Try to log even if no logger exist
try_info!(opt_logger.logger, "You won't see me output.  The logger is None."; "opt" => "None");
try_info!(opt_logger.logger, #"imatag", "You won't see me output.  The logger is None."; "opt" => "None");

// Setup a `Logger`
let plain = slog_term::PlainSyncDecorator::new(::std::io::stdout());
let logger = Logger::root(slog_term::FullFormat::new(plain)
    .build()
    .fuse(), o!("surname" => "Lava"));

opt_logger.logger = Some(logger);

// Call again with the new attached logger
try_info!(opt_logger.logger, "You will see me output!"; "opt" => "Some");
try_info!(opt_logger.logger, #"imatag", "You will see me output!"; "opt" => "Some");

使用Discard Logger

您可以使用slogs Discard drain代替包装在Option中的日志记录器。像try_*宏一样,如果不存在日志记录器,则丢弃日志记录器将丢弃所有传入的消息。

如何初始化丢弃的日志记录器

use slog::{Logger, Discard, o};

fn main() {
    let logger = Logger::root(Discard, o!());
    info!(logger, "nothing happens");
}

依赖项

~160KB