Как я могу напечатать сообщение об ошибке в Actix-Web без паники? - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь понять обработку ошибок из одного из примеров из репозитория Actix.Он использует 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 голосов
/ 05 февраля 2019

Actix-Web отображает ошибки в log::error!.Попробуйте начать свой пример с RUST_LOG=actix_web=debug

...