rust 如何使用Axum启用日志/跟踪?

jhdbpxl9  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(444)

学习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();

即使这得到了日志输出,我也不能解释为什么。所以也许了解这些板条箱如何工作的人可以给出一个解释,我可以接受作为问题的答案

ovfsdjhp

ovfsdjhp1#

您可以使用tracing-subscriber机箱快速启动和运行:

tracing_subscriber::fmt()
    .with_max_level(tracing::Level::DEBUG)
    .init();

以上尝试的差异仅在于默认值。默认情况下,TraceLayer将使用DEBUG级别进行日志记录。使用fmt()配置了默认的INFO日志记录级别,而registry().with(..).init()不配置日志级别过滤器。
您还可以使用可定制的on_*方法来更改TraceLayer的行为。
另见:

相关问题