From 2f7a5dbb8070e612a287b80083b2fc20eb13cd05 Mon Sep 17 00:00:00 2001 From: Stefan <42220813+Stefanuk12@users.noreply.github.com> Date: Fri, 24 Nov 2023 16:58:21 +0000 Subject: [PATCH] Make `loggers::logging::try_log` public --- src/lib.rs | 1 + src/loggers/logging.rs | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 3067d1d2..34c9d7f8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -37,6 +37,7 @@ pub use self::loggers::{TermLogger, TerminalMode}; pub use termcolor::{Color, ColorChoice}; pub use log::{Level, LevelFilter}; +pub use loggers::logging::try_log; use log::Log; #[cfg(test)] diff --git a/src/loggers/logging.rs b/src/loggers/logging.rs index 47bc99ff..8fb6340e 100644 --- a/src/loggers/logging.rs +++ b/src/loggers/logging.rs @@ -21,6 +21,42 @@ pub fn termcolor_to_ansiterm(color: &Color) -> Option { } } +/// Allows for custom loggers to be created, making formatting easier. +/// +/// Takes a `Config` and a `Record` and writes the log to the specified `Write`r. +/// Fails if the `Write`r fails to write. +/// +/// # Example +/// ```rs +/// impl log::Log for ... { +/// fn enabled(&self, metadata: &log::Metadata) -> bool { +/// metadata.level() <= self.level +/// } +/// fn log(&self, record: &log::Record) { +/// if !self.enabled(record.metadata()) { +/// return; +/// } +/// +/// let mut s = Vec::new(); +/// let _ = simplelog::try_log(&self.config, record, &mut std::io::Cursor::new(&mut s)); +/// let s = std::str::from_utf8(&s).expect("utf8").trim(); +/// +/// ... +/// } +/// fn flush(&self) {} +/// } +/// impl simplelog::SharedLogger for ... { +/// fn level(&self) -> simplelog::LevelFilter { +/// self.level +/// } +/// fn config(&self) -> Option<&simplelog::Config> { +/// Some(&self.config) +/// } +/// fn as_log(self: Box) -> Box { +/// Box::new(*self) +/// } +/// } +/// ``` #[inline(always)] pub fn try_log(config: &Config, record: &Record<'_>, write: &mut W) -> Result<(), Error> where