1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
//! This module contains two traits which allow adding a stateful filter //! using [`Logger::filter`](crate::Logger::filter). //! //! # Example //! //! ```rust //! use flexi_logger::{ //! filter::{LogLineFilter, LogLineWriter}, //! DeferredNow, FlexiLoggerError, //! }; //! //! pub struct BarsOnly; //! impl LogLineFilter for BarsOnly { //! fn write( //! &self, //! now: &mut DeferredNow, //! record: &log::Record, //! log_line_writer: &dyn LogLineWriter, //! ) -> std::io::Result<()> { //! if record.args().to_string().contains("bar") { //! log_line_writer.write(now, record)?; //! } //! Ok(()) //! } //! } //! //! fn main() -> Result<(), FlexiLoggerError> { //! flexi_logger::Logger::try_with_str("info")? //! .filter(Box::new(BarsOnly)) //! .start()?; //! log::info!("barista"); //! log::info!("foo"); // will be swallowed by the filter //! log::info!("bar"); //! log::info!("gaga"); // will be swallowed by the filter //! Ok(()) //! } //! ``` use crate::DeferredNow; use log::Record; /// Trait of the filter object. #[allow(clippy::module_name_repetitions)] pub trait LogLineFilter { /// Each log line that `flexi_logger` would write to the configured output channel is /// sent to this method. /// /// Note that the log line only appears in the configured output channel if the /// filter implementation forwards it to the provided `LogLineWriter`. /// /// # Errors /// /// If writing to the configured output channel fails. fn write( &self, now: &mut DeferredNow, record: &Record, log_line_writer: &dyn LogLineWriter, ) -> std::io::Result<()>; } /// Write out a single log line pub trait LogLineWriter { /// Write out a log line to the configured output channel. /// /// # Errors /// /// If writing to the configured output channel fails. fn write(&self, now: &mut DeferredNow, record: &Record) -> std::io::Result<()>; }