logging - 如何为 Rust 中的日志输出添加特定前缀?

标签 logging rust

我有一个对象,希望每个日志输出都以对象的某些状态为前缀。但是为每条日志语句添加前缀是非常不方便的。有什么简单的实现方法吗?

下面是示例代码。

use log::info;

struct Obj {
    id: i32,
    name: String,
}

impl Obj {
    // can I use `info!("receive {} from {}", item, from);` for simplicity?
    fn call_me(&self, item: i32, from: String) {
        info!("[id: {}][name: {}] receive {} from {}", self.id, self.name, item, from);
    }
    // ...many methods
}

任何帮助将不胜感激!

最佳答案

你可以为此写一个宏:

#[macro_export]
macro_rules! log {
    ($sel:ident, $s:literal, $($arg:tt)*)
    =>
    (info!(concat!("[id: {}] [name: {}] ", $s), $sel.id, $sel.name, $($arg)*));
}

struct Obj {
    id: i32,
    name: String,
}

impl Obj {
    fn call_me(&self, item: i32, from: String) {
        log!(self, "receive {} from {}", item, from);
    }
}

它并不完美,因为您仍然需要通过 self,但我不确定您是否可以做得更好。

playground

关于logging - 如何为 Rust 中的日志输出添加特定前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58096003/

相关文章:

rust - 在 Cargo 中指定依赖版本的语法是什么?

rust - 如何将 serde_json 与联合类型(如枚举)一起使用?

java - 每个级别定义 1 个 logback 文件

xml - 使用 Log4j XML 配置文件配置 Hibernate 日志记录?

rust - 有什么方法可以实现 ZipFile 的 Send 特性吗?

rust - 如何在 Dioxus 中添加全局 keydown 事件监听器)?

struct - 如何从元组结构中提取值?

json - 如何将 slf4j-over-logback 日志写为 JSON

docker - 如何在ansible中指定docker run的log-opt来限制容器的日志大小?

java - 有什么理由让新项目使用 log4j 而不是 Logback?