workflow_egui/runtime/
panic.rs

1use crate::runtime::Runtime;
2use std::backtrace::Backtrace;
3use std::fs;
4use std::panic;
5
6pub fn init_graceful_panic_handler() {
7    let default_hook = panic::take_hook();
8    panic::set_hook(Box::new(move |panic_info| {
9        let backtrace = Backtrace::capture();
10        // println!("panic! \n{:#?}\n{:#?}", panic_info, backtrace);
11        let _ = fs::write(
12            "application-panic.log",
13            format!("{:#?}\n{:#?}", panic_info, backtrace),
14        );
15        println!("An unexpected condition (panic) has occurred. Additional information has been written to `application-panic.log`");
16        default_hook(panic_info);
17        Runtime::abort();
18    }));
19}
20
21pub fn init_ungraceful_panic_handler() {
22    let default_hook = panic::take_hook();
23    panic::set_hook(Box::new(move |panic_info| {
24        let backtrace = Backtrace::capture();
25        let _ = fs::write(
26            "service-panic.log",
27            format!("{:#?}\n{:#?}", panic_info, backtrace),
28        );
29        default_hook(panic_info);
30        println!("An unexpected condition (panic) has occurred. Additional information has been written to `service-panic.log`");
31        println!("Exiting...");
32        std::process::exit(1);
33    }));
34}