1 //! Utilities for configuring the `env_logger` crate to emit `tracing` events.
2
3 /// Extension trait to configure an `env_logger::Builder` to emit traces.
4 pub trait BuilderExt: crate::sealed::Sealed {
5 /// Configure the built `env_logger::Logger` to emit `tracing` events for
6 /// all consumed `log` records, rather than printing them to standard out.
7 ///
8 /// Note that this replaces any previously configured formatting.
emit_traces(&mut self) -> &mut Self9 fn emit_traces(&mut self) -> &mut Self;
10 }
11
12 impl crate::sealed::Sealed for env_logger::Builder {}
13
14 impl BuilderExt for env_logger::Builder {
emit_traces(&mut self) -> &mut Self15 fn emit_traces(&mut self) -> &mut Self {
16 self.format(|_, record| super::format_trace(record))
17 }
18 }
19
20 /// Attempts to initialize the global logger with an env logger configured to
21 /// emit `tracing` events.
22 ///
23 /// This should be called early in the execution of a Rust program. Any log
24 /// events that occur before initialization will be ignored.
25 ///
26 /// # Errors
27 ///
28 /// This function will fail if it is called more than once, or if another
29 /// library has already initialized a global logger.
try_init() -> Result<(), log::SetLoggerError>30 pub fn try_init() -> Result<(), log::SetLoggerError> {
31 env_logger::Builder::from_default_env()
32 .emit_traces()
33 .try_init()
34 }
35
36 /// Initializes the global logger with an env logger configured to
37 /// emit `tracing` events.
38 ///
39 /// This should be called early in the execution of a Rust program. Any log
40 /// events that occur before initialization will be ignored.
41 ///
42 /// # Panics
43 ///
44 /// This function will panic if it is called more than once, or if another
45 /// library has already initialized a global logger.
init()46 pub fn init() {
47 try_init()
48 .expect("tracing_log::env_logger::init should not be called after logger initialized");
49 }
50