学习Axum和我想添加日志到一个服务,我已经放在一起,但不幸的是,我不能让它工作。
我做了什么?
我在Cargo.html中添加了tower-http = { version = "0.3.5", features = ["trace"] }
,在服务的定义中,我有以下内容:
use tower_http::trace::TraceLayer;
let app = Router::new()
.route("/:name/path", axum::routing::get(handler))
.layer(TraceLayer::new_for_http())
但是当我启动应用程序并向端点发出请求时,什么也不会记录。
是否有任何配置步骤我可能错过了?
- 编辑1**
正如评论中所建议的,我添加了跟踪订阅者的板条箱:
tracing-subscriber = { version = "0.3"}
并将代码更新如下:
use tower_http::trace::TraceLayer;
use tower_http::trace::TraceLayer;
tracing_subscriber::fmt().init();
let app = Router::new()
.route("/:name/path", axum::routing::get(handler))
.layer(TraceLayer::new_for_http())
但是,仍然没有日志输出。
- 编辑2**
好吧,最后起作用的是
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
然后初始化如下:
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer())
.init();
即使这得到了日志输出,我也不能解释为什么。所以也许了解这些板条箱如何工作的人可以给出一个解释,我可以接受作为问题的答案
1条答案
按热度按时间ovfsdjhp1#
您可以使用tracing-subscriber机箱快速启动和运行:
以上尝试的差异仅在于默认值。默认情况下,
TraceLayer
将使用DEBUG
级别进行日志记录。使用fmt()
配置了默认的INFO
日志记录级别,而registry().with(..).init()
不配置日志级别过滤器。您还可以使用可定制的
on_*
方法来更改TraceLayer
的行为。另见: