Как без паники распечатать сообщение об ошибке в Actix-Web?

Я пытаюсь понять обработку ошибок из одного из примеры из репозитория 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 сообщение (_7 _...) в моем терминале.

Есть ли какой-нибудь удобный встроенный способ отобразить это в моих журналах, кроме добавления println! в error_response? Я считаю, что имеет смысл отображать точную ошибку, а не общий InternalServerError: т.е. NetworkError / ParseError.

Если нет, то по какой причине он был разработан без возможности увидеть точную ошибку?


person James Larkin    schedule 04.02.2019    source источник


Ответы (1)


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

person Nikolay Kim    schedule 04.02.2019
comment
Не могли бы вы уточнить первую часть вашего ответа? - person James Larkin; 05.02.2019
comment
@JamesLarkin actix регистрирует все ошибки, используя log ящик. В зависимости от регистратора, используемого вашей программой, некоторые сообщения будут отфильтрованы. Николай предполагает, что вы используете env_logger или что-то совместимое, что позволяет менять фильтр при запуске программа для включения этих сообщений об ошибках. - person mcarton; 05.02.2019