您如何解决在HTTP代码中记录HTTP请求以及输出跟踪和错误消息的不同任务?

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

我阅读了有关如何使用日志记录中间件在Actix中记录HTTP请求的信息:

https://docs.rs/actix-web/1.0.0/actix_web/middleware/struct.Logger.html

现在说,我还想使用日志箱的框架在我的应用程序中添加日志记录。例如,我需要详细的调试跟踪以及在实际恐慌停止之前输出恐慌消息的好地方。由于只能通过日志配置一个记录器,这会引起问题吗?如果我还想记下当前的用户名或会话ID,我是否必须将其一直传递下去,还是Actix有办法在全球范围内获取该信息?

logging rust actix-web
1个回答
0
投票

您可以将相同的记录器用于Actix-web和其余的应用程序。关键是通过包含可选参数target来区分对宏的调用(trace!,debug!,info!,warn!和error!)。然后,您必须设置RUST_LOG环境变量。

示例调用:

RUST_LOG="info,parser::expression=trace,actix_web=info" cargo run
  • actix_web以他们的代码为目标,并打印信息和更高级别的消息。
  • parser::expression以我的代码的一部分为目标并启用跟踪级别的消息。

在我的代码中,这是示例跟踪消息:

    trace!(target: "parser::expression", "Tracing: {}", self.expression_source);

如果省略target参数,则模块路径将成为默认目标,或者文档会这样说,但是我在模块路径中使用的每一个拼写,包括越来越少的部分,包括类名等,全部失败,所以我不理解文档。手动指定它确实有效,所以我可以这样做。

在Cargo.toml文件中正确设置包装箱导入也很重要:

[dependencies]
log = { version = "0.4", features = ["max_level_trace", "release_max_level_warn", "std", "serde"] }

以上内容允许在开发版本上跟踪消息,但仅在发布版本上提供警告。编译器将在编译时丢弃代码,因此在运行时更改环境变量将不会对这种更改产生影响。

这里有一些有用的文档:

https://rust-lang-nursery.github.io/rust-cookbook/development_tools/debugging/config_log.html

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