Setup outside of main
emit
is typically configured in your main
function, but that might not be feasible for some applications. In these cases, you can run emit
's setup in a function and flush it deliberately at some later point:
#![allow(unused)] fn main() { extern crate emit; extern crate emit_term; fn diagnostics_init() { let _ = emit::setup() .emit_to(emit_term::stdout()) .try_init(); } fn diagnostics_flush() { emit::blocking_flush(std::time::Duration::from_secs(5)); } }
Calling try_init()
ensures you don't panic even if setup is called multiple times.
emit
doesn't automatically flush or de-initialize its runtime when Init
goes out of scope so it's safe to let it drop before your application exits.