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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
use crate::Loggify; use log; use log::{Level, SetLoggerError}; /// Struct for building a new logger pub struct LogBuilder { exclude: Vec<String>, level: Level, time_format: String, log_target: bool } impl LogBuilder { /// Creates a new instance of the `LogBuilder` /// /// # Defaults /// - `level` -> The default level is `Info` /// - `exclude` -> No targets are excluded /// - `time_format` -> dd.mm.YY HH:MM:SS /// - `log_target` -> false /// /// # Example /// ``` /// //! Example for initializing the logger with the LogBuilder /// use log::{error, warn, info, debug, trace}; /// use loggify::LogBuilder; /// /// /// The `LogBuilder` is used to set more logger options /// /// This example will change the log level to Trace /// /// and the printed time format to time only /// fn main() { /// LogBuilder::new() /// .set_level(log::Level::Trace) /// .set_time_format(String::from("%H:%M:%S")) /// .build() /// .unwrap(); /// /// error!("My error message"); /// warn!("My warn message"); /// info!("My info message"); /// debug!("My debug message"); /// trace!("My trace message"); /// } /// ``` pub fn new() -> Self { Self { level: Level::Info, exclude: Vec::new(), time_format: String::from("%d.%m.%Y %H:%M:%S"), log_target: false } } /// Adds a new target to exclude from logging /// /// See the example `exclude` for usage pub fn add_exclude(mut self, name: String) -> Self { self.exclude.push(name); self } /// Sets the minimum level pub fn set_level(mut self, level: Level) -> Self { self.level = level; self } /// Sets the time format /// See https://docs.rs/chrono/0.4.6/chrono/format/strftime/index.html for supported escape sequences pub fn set_time_format(mut self, format: String) -> Self { self.time_format = format; self } /// Defines if the log target should be printed or not /// This option should be used to find out where a log comes /// from and what target to exclude from logging pub fn set_log_target(mut self, state: bool) -> Self { self.log_target = state; self } /// Creates a new logger pub fn build(self) -> Result<(), SetLoggerError> { let logger = Loggify { level: self.level, exclude: self.exclude, time_format: self.time_format, log_target: self.log_target }; log::set_boxed_logger(Box::new(logger))?; log::set_max_level(self.level.to_level_filter()); Ok(()) } }