//! This is an example to test the "meta-logging-in-format" fern cargo features. //! //! The example will hang if the feature is disabled, and will produce cohesive //! logs if it's enabled. use std::fmt; use log::{debug, info}; fn main() { fern::Dispatch::new() .chain(std::io::stdout()) .chain(std::io::stderr()) .chain(fern::log_file("hello.txt").unwrap()) .format(move |out, message, record| { out.finish(format_args!("[{}] {}", record.level(), message)) }) .apply() .unwrap(); // in order to actually trigger the situation that deadlocks, we need a custom // Display implementation which performs logging: struct Thing<'a>(&'a str); impl<'a> fmt::Display for Thing<'a> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { debug!("formatting Thing wrapping ({})", self.0); f.write_str(self.0) } } info!("I'm logging {}!", Thing("aha")); }