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

问题描述 投票:0回答:1

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

下面是示例代码。

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
}

任何帮助将不胜感激!

logging rust
1个回答
0
投票

您可以为此编写一个宏:

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

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) {
        log!(self, "receive {} from {}", item, from);
    }
}

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

playground

© www.soinside.com 2019 - 2024. All rights reserved.