use reovim_kernel::api::v1::{Level, Logger, Record};
use super::try_debug_ring;
#[derive(Debug, Clone, Copy, Default)]
pub struct CompositeLogger;
pub static COMPOSITE_LOGGER: CompositeLogger = CompositeLogger;
impl Logger for CompositeLogger {
fn log(&self, record: &Record) {
if let Some(ring) = try_debug_ring() {
ring.push(record);
}
match record.level() {
Level::Error => tracing::error!(
module_path = record.module_path(),
file = record.file(),
line = record.line(),
"{}",
record.message()
),
Level::Warn => tracing::warn!(
module_path = record.module_path(),
file = record.file(),
line = record.line(),
"{}",
record.message()
),
Level::Info => tracing::info!(
module_path = record.module_path(),
file = record.file(),
line = record.line(),
"{}",
record.message()
),
Level::Debug => tracing::debug!(
module_path = record.module_path(),
file = record.file(),
line = record.line(),
"{}",
record.message()
),
Level::Trace => tracing::trace!(
module_path = record.module_path(),
file = record.file(),
line = record.line(),
"{}",
record.message()
),
}
}
fn flush(&self) {
}
fn enabled(&self, level: Level) -> bool {
let ring_enabled = try_debug_ring().is_some();
let tracing_enabled = match level {
Level::Error => tracing::enabled!(tracing::Level::ERROR),
Level::Warn => tracing::enabled!(tracing::Level::WARN),
Level::Info => tracing::enabled!(tracing::Level::INFO),
Level::Debug => tracing::enabled!(tracing::Level::DEBUG),
Level::Trace => tracing::enabled!(tracing::Level::TRACE),
};
ring_enabled || tracing_enabled
}
}
#[cfg(test)]
#[path = "composite_logger_tests.rs"]
mod tests;