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() {
9 let default_hook = panic::take_hook();
10 panic::set_hook(Box::new(move |panic_info| {
11 let backtrace = Backtrace::capture();
12 let _ = fs::write(
14 "application-panic.log",
15 format!("{:#?}\n{:#?}", panic_info, backtrace),
16 );
17 println!(
18 "An unexpected condition (panic) has occurred. Additional information has been written to `application-panic.log`"
19 );
20 default_hook(panic_info);
21 Runtime::abort();
22 }));
23}
24
25pub fn init_ungraceful_panic_handler() {
28 let default_hook = panic::take_hook();
29 panic::set_hook(Box::new(move |panic_info| {
30 let backtrace = Backtrace::capture();
31 let _ = fs::write(
32 "service-panic.log",
33 format!("{:#?}\n{:#?}", panic_info, backtrace),
34 );
35 default_hook(panic_info);
36 println!(
37 "An unexpected condition (panic) has occurred. Additional information has been written to `service-panic.log`"
38 );
39 println!("Exiting...");
40 std::process::exit(1);
41 }));
42}