1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#[macro_export]
macro_rules! log_full_error {
    ($err:ident) => {
        use std::error::Error;
        use std::fmt::Write;

        use tracing::error;

        let mut error_message = format!("{}", $err);
        let mut error: &dyn Error = &$err;
        while let Some(source) = error.source() {
            error = source;
            write!(&mut error_message, ": {}", error).unwrap();
        }
        error!("{}", error_message);
    };
}