You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Rust Rocket框架500错误的详细报错信息?

获取Rocket服务器Panic的详细错误信息

问题背景

服务器端出现如下错误日志:

2023-08-16T06:24:47.573596263+00:00 [/home/rust/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rocket-0.5.0-rc.3/src/server.rs:56] ERROR rocket::server:Handler get_src panicked.
2023-08-16T06:24:47.573629024+00:00 [/home/rust/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rocket-0.5.0-rc.3/src/server.rs:56] WARN rocket::server:A panic is treated as an internal server error.
2023-08-16T06:24:47.573646358+00:00 [/home/rust/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rocket-0.5.0-rc.3/src/server.rs:325] WARN rocket::server:No 500 catcher registered. Using Rocket default.
2023-08-16T06:27:56.855388341+00:00 [/home/rust/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rocket-0.5.0-rc.3/src/server.rs:56] ERROR rocket::server:Handler get_src panicked.
2023-08-16T06:27:56.855422211+00:00 [/home/rust/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rocket-0.5.0-rc.3/src/server.rs:56] WARN rocket::server:A panic is treated as an internal server error.
2023-08-16T06:27:56.855437724+00:00 [/home/rust/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rocket-0.5.0-rc.3/src/server.rs:325] WARN rocket::server:No 500 catcher registered. Using Rocket default.
2023-08-16T06:27:58.894042355+00:00 [/home/rust/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rocket-0.5.0-rc.3/src/server.rs:56] ERROR rocket::server:Handler get_src panicked.
2023-08-16T06:27:58.894076040+00:00 [/home/rust/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rocket-0.5.0-rc.3/src/server.rs:56] WARN rocket::server:A panic is treated as an internal server error.
2023-08-16T06:27:58.894102580+00:00 [/home/rust/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rocket-0.5.0-rc.3/src/server.rs:325] WARN rocket::server:No 500 catcher registered. Using Rocket default.
2023-08-16T06:28:02.054234696+00:00 [/home/rust/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rocket-0.5.0-rc.3/src/server.rs:56] ERROR rocket::server:Handler get_src panicked.
2023-08-16T06:28:02.054270654+00:00 [/home/rust/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rocket-0.5.0-rc.3/src/server.rs:56] WARN rocket::server:A panic is treated as an internal server error.
2023-08-16T06:28:02.054285534+00:00 [/home/rust/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rocket-0.5.0-rc.3/src/server.rs:325] WARN rocket::server:No 500 catcher registered. Using Rocket default.

仅从日志只能得知get_src处理器发生了panic,没有更多细节。于是定义了如下500错误捕获器:

#![feature(proc_macro_hygiene, decl_macro)]

#[macro_use] extern crate rocket;

use rocket::Request;

#[catch(500)]
fn internal_error(req: &rocket::Request) -> String{
  error!("internal error");
  return "internal error".to_string();
}

fn main() {
    rocket::ignite().register(catchers![internal_error]).launch();
}

请问如何获取服务器错误的详细信息?


解决方案

要获取panic的详细信息,可以通过以下几种方式实现:

1. 在捕获器中提取panic详情

Rocket的Request对象提供了panic_info()方法,能直接获取panic的负载信息和栈回溯。修改你的500捕获器:

#[catch(500)]
fn internal_error(req: &rocket::Request) -> String {
    let error_details = match req.panic_info() {
        Some(info) => {
            let msg = info.payload().unwrap_or("无具体错误消息");
            format!("Panic详情:{},栈回溯:{:?}", msg, info.location())
        }
        None => "未捕获到panic详情".to_string()
    };
    
    // 将详细错误写入日志
    error!("{}", error_details);
    // 开发环境可返回详细信息,生产环境建议返回通用提示
    error_details
}

2. 启用Rocket开发模式

在debug编译模式下,使用rocket::build()替代rocket::ignite()启动服务,Rocket会自动开启开发模式,将包含栈回溯的详细错误直接返回给客户端,同时输出到日志:

fn main() {
    rocket::build()
        .register(catchers![internal_error])
        .launch();
}

生产环境可通过设置环境变量ROCKET_ENV=production关闭此模式,避免泄露敏感信息。

3. 提升日志级别

将Rocket的日志级别设置为debug或trace,能在日志中看到更多底层执行细节。可以通过环境变量配置:

export RUST_LOG=rocket=debug

也可以在代码中直接配置:

use rocket::log::LogLevel;

fn main() {
    rocket::build()
        .configure(rocket::Config::figment().merge(("log_level", LogLevel::Debug)))
        .register(catchers![internal_error])
        .launch();
}

内容的提问来源于stack exchange,提问作者Dolphin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 00:54:58