相关疑难解决方法(0)

如何使用追踪库?

我这里有一个非常简单的代码示例,它只想获取我传入的列表的第一项。我一直在尝试通过跟踪来检测代码帮助调试应用程序,但坦率地说,文档太复杂了,我无法完全理解。

use std::fmt::Debug;
use tracing::{span, Level, event};

fn main() {
    pub fn calculate<T: Debug, const N: usize>(data_set: [T; N]) -> (i32, i32) {

        // Tracing BoilerPlate
        event!(Level::INFO, "something happened");
        let span = span!(Level::INFO, "my_span");
        let _guard = span.enter();
        
        // Key Code 
        let _var = data_set.get(0);
        println!("Output_1: {:?}", data_set.get(0)); 
        
        event!(Level::DEBUG, "something happened inside my_span");
        
        // Ignore
        return (0, 0)
    }

    let data = [1509, 1857, 1736, 1815, 1576];
    let _result = calculate(data);
}
Run Code Online (Sandbox Code Playgroud)

具体来说,我不明白在哪里可以查看event!日志。它们似乎没有打印到任何窗口或文件或任何东西。

有人可以指导我在哪里可以找到这些调试日志,或者为我提供如何使用跟踪箱的简化说明吗?

rust rust-tracing

28
推荐指数
2
解决办法
2万
查看次数

如何使用 Axum 正确过滤请求日志?

我将 Axum 用于相对简单的 Web API,并希望获得类似于 Go Gin、IIS 日志、Python FastAPI 等的传入请求的日志记录/跟踪输出 - 简单的路径和参数输出。

HTTP 层已添加到路由器:

let app = Router::new()
    .route("/hello", get(hello_img))
    .layer(TraceLayer::new_for_http());
Run Code Online (Sandbox Code Playgroud)

这大约导致我正在寻找的内容: 良好的输出

然而,还有很多额外的不需要的日志记录正在发生,所以我添加了一个过滤器来排除这些日志记录。添加过滤器后:

let filter = filter::Targets::new()
    .with_target("tower_http::trace::on_response", Level::TRACE)
    .with_target("tower_http::trace::on_request", Level::TRACE)
    .with_default(Level::INFO);
Run Code Online (Sandbox Code Playgroud)

并将其添加到订阅者:

let tracing_layer = tracing_subscriber::fmt::layer();

tracing_subscriber::registry()
    .with(tracing_layer)
    .with(filter)
    .init();
Run Code Online (Sandbox Code Playgroud)

输出更改为 坏输出

详细信息(方法、URI、参数)都消失了。

即使没有指定格式更改,为什么会发生这种情况?如何在控制台中保留请求/响应跟踪,但过滤掉其他不需要的跟踪?

rust rust-tracing rust-axum

11
推荐指数
1
解决办法
5828
查看次数

标签 统计

rust ×2

rust-tracing ×2

rust-axum ×1