如何在 Actix-Web 中打印错误消息而不惊慌?
How can I print an error's message in Actix-Web without panicking?
我正在尝试从 Actix 存储库的 examples 之一了解错误处理。它使用 failure
crate 来处理错误。这是一段相关的代码:
#[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())
}
}
如果我的处理程序 returns 一个 ServiceError
代码没有崩溃,它将呈现一个 HttpResponse
(参见 error_response()
)。因此,我将无法在我的终端中看到 Fail
消息 (#[fail(display
...)。
除了将 println!
添加到 error_response
之外,还有什么好的内置方法可以在我的日志中显示它吗?我相信显示确切的错误而不是一般的 InternalServerError
是完全有意义的:即 NetworkError/ParseError。
如果不是,那么设计时无法看到确切错误的原因是什么?
Actix-Web 将错误呈现给 log::error!
。尝试用 RUST_LOG=actix_web=debug
开始你的例子
我正在尝试从 Actix 存储库的 examples 之一了解错误处理。它使用 failure
crate 来处理错误。这是一段相关的代码:
#[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())
}
}
如果我的处理程序 returns 一个 ServiceError
代码没有崩溃,它将呈现一个 HttpResponse
(参见 error_response()
)。因此,我将无法在我的终端中看到 Fail
消息 (#[fail(display
...)。
除了将 println!
添加到 error_response
之外,还有什么好的内置方法可以在我的日志中显示它吗?我相信显示确切的错误而不是一般的 InternalServerError
是完全有意义的:即 NetworkError/ParseError。
如果不是,那么设计时无法看到确切错误的原因是什么?
Actix-Web 将错误呈现给 log::error!
。尝试用 RUST_LOG=actix_web=debug