Rust - 跟踪调试器 - 想要简单说明如何使用
Rust - Tracing Debugger - Want Simple Explanation Of How To Use
use std::fmt::Debug;
use tracing::{span, Level, event, instrument};
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);
}
跟踪文档:https://docs.rs/tracing/0.1.29/tracing/
我这里有一个非常简单的代码示例,它只是想获取我传入的列表的第一项。我一直在尝试实现 rust-tracing
来尝试调试应用程序,但坦率地说,文档是太复杂了,我无法完全理解。
具体到这里,我不明白在哪里可以查看event!
日志。他们似乎没有打印到任何 window 或文件或任何东西。
有人可以告诉我在哪里可以找到这些调试日志,或者向我提供有关如何使用 tracing
模块的简单说明吗?
这是 tracing
的基本实现,它将信息输出到 日志文件(存储库根目录中的debug.log)and/or stdout(带有更多代码)使用名为 tracing-subscriber
的合作伙伴 crate
要找到这些有关如何将 tracing
和 tracing-subscriber
结合在一起的具体示例,您必须深入研究文档:转到 tracing-subscriber
箱子,然后转到Layer
特征,然后转到 Module level documentation
。 Here is an alternative link.
frankly the documentation is too sophisticated for me to completely understand.
我认为这两个箱子的文档还有很多工作要做。客观上,它并不能让初学者很容易理解发生了什么。文档用高度复杂的语言描述了板条箱,但未能正确地向新手教授基础知识。需要针对此主题创建更完整的资源或快速入门指南。
更简单的调试工具可用,正确地教你如何使用它的 crate。 Flexi-logger
提供了一个 code examples documentation page ,它熟练地解释了如何使用 crate。 Flexi-logger
与 Log
crate 协同工作以输出 log files
以及 stdout
和 stderr
.
Here is the Tracing Implementation
use tracing_subscriber::{filter, prelude::*};
use std::{fs::File, sync::Arc};
// A layer that logs events to stdout using the human-readable "pretty"
// format.
fn main() {
let stdout_log = tracing_subscriber::fmt::layer()
.pretty();
// A layer that logs events to a file.
let file = File::create("debug.log");
let file = match file {Ok(file) => file,Err(error) => panic!("Error: {:?}",error),};
let debug_log = tracing_subscriber::fmt::layer()
.with_writer(Arc::new(file));
// A layer that collects metrics using specific events.
let metrics_layer = /* ... */ filter::LevelFilter::INFO;
tracing_subscriber::registry()
.with(
stdout_log
// Add an `INFO` filter to the stdout logging layer
.with_filter(filter::LevelFilter::INFO)
// Combine the filtered `stdout_log` layer with the
// `debug_log` layer, producing a new `Layered` layer.
.and_then(debug_log)
// Add a filter to *both* layers that rejects spans and
// events whose targets start with `metrics`.
.with_filter(filter::filter_fn(|metadata| {
!metadata.target().starts_with("metrics")
}))
)
.with(
// Add a filter to the metrics label that *only* enables
// events whose targets start with `metrics`.
metrics_layer.with_filter(filter::filter_fn(|metadata| {
metadata.target().starts_with("metrics")
}))
)
.init();
// This event will *only* be recorded by the metrics layer.
tracing::info!(target: "metrics::cool_stuff_count", value = 42);
// This event will only be seen by the debug log file layer:
tracing::debug!("this is a message, and part of a system of messages");
// This event will be seen by both the stdout log layer *and*
// the debug log file layer, but not by the metrics layer.
tracing::warn!("the message is a warning about danger!");
}
use std::fmt::Debug;
use tracing::{span, Level, event, instrument};
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);
}
跟踪文档:https://docs.rs/tracing/0.1.29/tracing/
我这里有一个非常简单的代码示例,它只是想获取我传入的列表的第一项。我一直在尝试实现 rust-tracing
来尝试调试应用程序,但坦率地说,文档是太复杂了,我无法完全理解。
具体到这里,我不明白在哪里可以查看event!
日志。他们似乎没有打印到任何 window 或文件或任何东西。
有人可以告诉我在哪里可以找到这些调试日志,或者向我提供有关如何使用 tracing
模块的简单说明吗?
这是 tracing
的基本实现,它将信息输出到 日志文件(存储库根目录中的debug.log)and/or stdout(带有更多代码)使用名为 tracing-subscriber
要找到这些有关如何将 tracing
和 tracing-subscriber
结合在一起的具体示例,您必须深入研究文档:转到 tracing-subscriber
箱子,然后转到Layer
特征,然后转到 Module level documentation
。 Here is an alternative link.
frankly the documentation is too sophisticated for me to completely understand.
我认为这两个箱子的文档还有很多工作要做。客观上,它并不能让初学者很容易理解发生了什么。文档用高度复杂的语言描述了板条箱,但未能正确地向新手教授基础知识。需要针对此主题创建更完整的资源或快速入门指南。
更简单的调试工具可用,正确地教你如何使用它的 crate。 Flexi-logger
提供了一个 code examples documentation page ,它熟练地解释了如何使用 crate。 Flexi-logger
与 Log
crate 协同工作以输出 log files
以及 stdout
和 stderr
.
Here is the Tracing Implementation
use tracing_subscriber::{filter, prelude::*};
use std::{fs::File, sync::Arc};
// A layer that logs events to stdout using the human-readable "pretty"
// format.
fn main() {
let stdout_log = tracing_subscriber::fmt::layer()
.pretty();
// A layer that logs events to a file.
let file = File::create("debug.log");
let file = match file {Ok(file) => file,Err(error) => panic!("Error: {:?}",error),};
let debug_log = tracing_subscriber::fmt::layer()
.with_writer(Arc::new(file));
// A layer that collects metrics using specific events.
let metrics_layer = /* ... */ filter::LevelFilter::INFO;
tracing_subscriber::registry()
.with(
stdout_log
// Add an `INFO` filter to the stdout logging layer
.with_filter(filter::LevelFilter::INFO)
// Combine the filtered `stdout_log` layer with the
// `debug_log` layer, producing a new `Layered` layer.
.and_then(debug_log)
// Add a filter to *both* layers that rejects spans and
// events whose targets start with `metrics`.
.with_filter(filter::filter_fn(|metadata| {
!metadata.target().starts_with("metrics")
}))
)
.with(
// Add a filter to the metrics label that *only* enables
// events whose targets start with `metrics`.
metrics_layer.with_filter(filter::filter_fn(|metadata| {
metadata.target().starts_with("metrics")
}))
)
.init();
// This event will *only* be recorded by the metrics layer.
tracing::info!(target: "metrics::cool_stuff_count", value = 42);
// This event will only be seen by the debug log file layer:
tracing::debug!("this is a message, and part of a system of messages");
// This event will be seen by both the stdout log layer *and*
// the debug log file layer, but not by the metrics layer.
tracing::warn!("the message is a warning about danger!");
}