我正在尝试从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 。
如果没有,那是为什么它无法查看确切错误的原因是什么?