【发布时间】:2021-02-11 02:38:44
【问题描述】:
我正在尝试使用tracing crate 实现一些集中式日志记录。
我可以使用 crate tracing_appender 写入滚动文件或使用以下代码写入 Graylog 应用程序:
let mut guards = Vec::new();
if let Some(log) = config.logs {
if let Some(file) = log.file {
let file_appender = tracing_appender::rolling::hourly(file.directory, file.filename);
let (non_blocking, guard) = tracing_appender::non_blocking(file_appender);
guards.push(guard);
let file_logger = tracing_subscriber::fmt()
.with_writer(non_blocking)
.init();
}
if let Some(graylog) = log.graylog {
let address: SocketAddr = graylog.host.parse().expect("Unable to parse graylog host address");
let bg_task = Logger::builder()
.additional_field("module_id", graylog.module_id)
.init_tcp(address)
.unwrap();
tokio::spawn(bg_task);
}
}
如果日志配置仅包含 file 或 graylog 定义之一,它可以工作,但如果我定义了两个应用程序在启动时崩溃。
我认为存在冲突,因为两者都试图设置默认收集器。 有什么方法可以定义两者来接受每个跨度和事件?
【问题讨论】: