在 log4rs 中检索记录器

Retrieve logger in log4rs

我是一名 C++ 开发人员并探索 Rust。我习惯了 log4cxx 库,并尝试在它的 Rust 对应 log4rs 中找到我的出路。

我创建了一个将 xml 解析为结构的库。日志记录是使用 log:: 宏完成的,它提供了与实现无关的接口。

现在我将如何检索 log4rs 记录器并将其传递给对象。似乎所有的日志宏都使用根记录器,这首先破坏了使用 log4rs 的优势。

解决方案:

感谢@Jmb 的回答。这是我打算做的一个例子(板条箱名称:test_crate):

在main.rs

  // configure log4cxx logger
  let stdout = ConsoleAppender::builder()
    .encoder(Box::new(PatternEncoder::new("{d} - {m}{n}")))
    .build();

  let config = Config::builder()
    .appender(Appender::builder().build("stdout", Box::new(stdout)))
    .logger(Logger::builder().build("test_crate::my_module", LevelFilter::Trace))
    .build(Root::builder().appender("stdout").build(LevelFilter::Warn))
    .unwrap();

  log4rs::init_config(config).unwrap();

并从 lib.rs

中的 my_module 模块中调用 log::...

注意:理想情况下,应该在单独的日志记录配置文件中配置记录器,以便在运行时配置记录器。

默认情况下,日志宏为每个 Rust 模块使用不同的记录器:A target is a string which defaults to the module path of the location of the log request, though that default may be overridden.。你可以使用例如info!(target: "foo", "message"); 以不同的记录器为目标。