1 error-handling error-logging rust
动机:我想记录文件名、行号、函数名、错误代码等以帮助分析错误
Rust 必须?进行错误处理。如果?. 如何实现这一目标?
代码:
let a = do_some_function_may_return_error()?; // Does it auto log the error info when error occurs?
let b = a.do_another_function_may_return_error()?; // Does it auto log the error info when error occurs?
Run Code Online (Sandbox Code Playgroud)
不,这种情况不会发生,并且可能由于多种原因而无法发生:
?可能是不可能的。?除 之外还可以用于其他类型Result,例如Option或Poll。这些应该记录到文件中吗?Result不保证它可以被格式化为文本。相反,我会添加一个扩展特征:
trait LogExt {
fn log(self) -> Self;
}
impl<T, E> LogExt for Result<T, E>
where
E: std::fmt::Display,
{
fn log(self) -> Self {
if let Err(e) = &self {
eprintln!("An error happened: {}", e);
}
self
}
}
Run Code Online (Sandbox Code Playgroud)
这将在每个之前使用?:
fn main() -> Result<(), String> {
fails().log()?;
Ok(())
}
fn fails() -> Result<(), String> {
Err("Oh no!".into())
}
Run Code Online (Sandbox Code Playgroud)