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.