演示
为了快速定位问题,通常把错误发生的文件以及行号打印出来。比如:
示例代码:
1. use log_example_rs::example;
2. use log_example_rs::log;
3.
4. fn main() {
5. log!("start");
6.
7. example::example1();
8. example::example2();
9. example::example3();
10.
11. log!("done")
12. }
输出:
[2022-05-15 13:12:32] src/main.rs:5: "start"
[2022-05-15 13:12:32] src/example/mod.rs:4: "message from example1"
[2022-05-15 13:12:32] src/example/mod.rs:8: "message from example2"
[2022-05-15 13:12:32] src/example/mod.rs:12: "message from example3"
[2022-05-15 13:12:32] src/main.rs:11: "done"
从日志格式中,能轻易的定位到问题所在的代码文件以及行数,提供了一种快速解决问题的途径。
如何实现
实现代码 log.rs
#[macro_export]
macro_rules! log {
($($args: expr),*) => {
$(
print!("[{}] {}:{}: {:?}\n",chrono::prelude::Local::now().format("%Y-%m-%d %H:%M:%S").to_string(), file!(), line!(),$args);
)*
}
}
利用四个函数上述日志格式的输出:
print!() : 输出字符串
file!() : 输出源文件地址
line!() : 输出代码调用行数
chrono : 提供日期及格式