workflow_egui/runtime/
panic.rs1use 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 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}