pub struct CombinedLogger { /* private fields */ }
Expand description

The CombinedLogger struct. Provides a Logger implementation that proxies multiple Loggers as one.

The purpose is to allow multiple Loggers to be set globally

Implementations§

source§

impl CombinedLogger

source

pub fn init(logger: Vec<Box<dyn SharedLogger>>) -> Result<(), SetLoggerError>

init function. Globally initializes the CombinedLogger as the one and only used log facility.

Takes all used Loggers as a Vector argument. None of those Loggers should already be set globally.

All loggers need to implement log::Log and logger::SharedLogger and need to provide a way to be initialized without calling set_logger. All loggers of this library provide a `new(..)`` method for that purpose. Fails if another logger is already set globally.

§Examples
let _ = CombinedLogger::init(
            vec![
                TermLogger::new(LevelFilter::Info, Config::default(), TerminalMode::Mixed, ColorChoice::Auto),
                WriteLogger::new(LevelFilter::Info, Config::default(), File::create("my_rust_bin.log").unwrap())
            ]
        );
Examples found in repository?
examples/usage.rs (lines 8-23)
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
fn main() {
    CombinedLogger::init(vec![
        #[cfg(feature = "termcolor")]
        TermLogger::new(
            LevelFilter::Warn,
            Config::default(),
            TerminalMode::Mixed,
            ColorChoice::Auto,
        ),
        #[cfg(not(feature = "termcolor"))]
        SimpleLogger::new(LevelFilter::Warn, Config::default()),
        WriteLogger::new(
            LevelFilter::Info,
            Config::default(),
            File::create("my_rust_binary.log").unwrap(),
        ),
    ])
    .unwrap();

    error!("Bright red error");
    info!("This only appears in the log file");
    debug!("This level is currently not enabled for any logger");
}
source

pub fn new(logger: Vec<Box<dyn SharedLogger>>) -> Box<CombinedLogger>

allows to create a new logger, that can be independently used, no matter whats globally set.

no macros are provided for this case and you probably dont want to use this function, but init(), if you dont want to build a CombinedLogger.

Takes all used loggers as a Vector argument. The log level is automatically determined by the lowest log level used by the given loggers.

All loggers need to implement log::Log.

§Examples
let combined_logger = CombinedLogger::new(
            vec![
                TermLogger::new(LevelFilter::Debug, Config::default(), TerminalMode::Mixed, ColorChoice::Auto),
                WriteLogger::new(LevelFilter::Info, Config::default(), File::create("my_rust_bin.log").unwrap())
            ]
        );

Trait Implementations§

source§

impl Log for CombinedLogger

source§

fn enabled(&self, metadata: &Metadata<'_>) -> bool

Determines if a log message with the specified metadata would be logged. Read more
source§

fn log(&self, record: &Record<'_>)

Logs the Record. Read more
source§

fn flush(&self)

Flushes any buffered records.
source§

impl SharedLogger for CombinedLogger

source§

fn level(&self) -> LevelFilter

Returns the set Level for this Logger Read more
source§

fn config(&self) -> Option<&Config>

Inspect the config of a running Logger Read more
source§

fn as_log(self: Box<Self>) -> Box<dyn Log>

Returns the logger as a Log trait object

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.