gpt4 book ai didi

logging - 您如何在代码的更深处处理记录 HTTP 请求以及输出跟踪和错误消息等不同任务?

转载 作者:行者123 更新时间:2023-11-29 08:30:43 29 4
gpt4 key购买 nike

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

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

现在说我还想使用 log crate 的框架在我的应用程序中添加日志记录。例如,我需要详细的调试跟踪和一个在实际 panic 停止世界之前输出 panic 消息的好地方。由于log只能配置一个logger,这样会不会有问题?如果我还想深入记录当前用户名或 session ID,我是否必须一路传递下去,或者 Actix 是否有办法在全局范围内实现这一点?

最佳答案

您可以对 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 文件中正确设置 crate 导入也很重要:

[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

关于logging - 您如何在代码的更深处处理记录 HTTP 请求以及输出跟踪和错误消息等不同任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58618394/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com