如何在Actix-Web中打印错误消息而不会惊慌?

时间:2019-02-04 22:17:53

标签: rust rust-actix

我正在尝试从Actix存储库中的examples之一了解错误处理。它使用failure条板箱来处理错误。这是一段相关的代码:

#[derive(Fail, Debug)]
pub enum ServiceError {
    #[fail(display = "Internal Server Error: {}", _0)]
    InternalServerError(String),

    #[fail(display = "BadRequest: {}", _0)]
    BadRequest(String),

    #[fail(display = "Unauthorized")]
    Unauthorized,
}

impl ResponseError for ServiceError {
    fn error_response(&self) -> HttpResponse {
        match *self {
            ServiceError::InternalServerError { .. } => HttpResponse::InternalServerError().json("Internal Server Error, Please try later"),
            ServiceError::BadRequest(ref message) => HttpResponse::BadRequest().json(message)
        }
    }
}

impl From<ParseError> for ServiceError {
    fn from(_: ParseError) -> ServiceError {
        ServiceError::BadRequest("Invalid UUID".into())
    }
}

如果我的处理程序返回了ServiceError,则代码不会出现混乱,它将呈现HttpResponse(请参见error_response())。因此,我无法在终端上看到Fail消息(#[fail(display ...)。

除了将println!添加到error_response之外,是否有任何不错的内置方法可以在日志中显示它?我认为显示确切的错误而不是通用的InternalServerError是完全有意义的,即 NetworkError / ParseError

如果没有,那是为什么它无法查看确切错误的原因是什么?

1 个答案:

答案 0 :(得分:0)

Actix-Web将错误呈现给log::error!。尝试从RUST_LOG=actix_web=debug

开始示例