2

我试图从 Actix 存储库中的一个示例中了解错误处理。它使用failurecrate 来处理错误。这是一段相关的代码:

#[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())
    }
}

如果我的处理程序返回 a ServiceError,代码不会恐慌,它将呈现一个HttpResponse(请参阅 参考资料error_response())。因此,我将无法在终端中看到Fail消息(#[fail(display...)。

println!除了添加到之外,还有什么好的内置方法可以在我的日志中显示它error_response?我相信显示确切的错误而不是通用的完全有意义InternalServerError:即NetworkError/ParseError

如果不是,那么设计它的原因是什么而无法看到确切的错误?

4

1 回答 1

1

Actix-Web 将错误呈现到log::error!. 尝试从您的示例开始RUST_LOG=actix_web=debug

于 2019-02-04T22:27:54.480 回答