use crate::filters::Filters;
pub struct MultiLogger {
filters: Filters,
loggers: Vec<Box<dyn log::Log>>,
}
impl MultiLogger {
pub fn init(self) -> Result<(), crate::Error> {
crate::init(self)
}
#[allow(clippy::new_without_default)]
pub fn new() -> Self {
Self {
filters: Filters::from_env(),
loggers: Vec::new(),
}
}
pub fn with(mut self, logger: impl log::Log + 'static) -> Self {
self.loggers.push(Box::new(logger));
self
}
}
impl log::Log for MultiLogger {
#[inline]
fn enabled(&self, metadata: &log::Metadata<'_>) -> bool {
self.filters.is_enabled(metadata)
}
#[inline]
fn log(&self, record: &log::Record<'_>) {
for logger in &self.loggers {
logger.log(record);
}
}
#[inline]
fn flush(&self) {
for logger in &self.loggers {
logger.flush();
}
}
}