Struct Logger

Source
pub struct Logger {
    pub formatter: Mutex<LogFormatter>,
    pub output: LogOutput,
    /* private fields */
}
Expand description

Logger capable of filtering logs, formatting them and distributing them to various streams.

The Logger struct is modular and itself only filters the logs, relying on LogFormatter and LogOutput for log formatting and outputting.

Additionally, Logger includes a template system with built-in methods and constructors for easy JSON serialization and deserialization.

§Examples

Using global logging:

use prettylogger::{debug, info, warn, err, fatal};

let mut message = "debug";
debug!("Hello, this is a {message} log!");

message = "info";
info!("Hello, this is an {message} log!");

message = "warning";
warn!("Hello, this is a {message}!");

message = "error";
err!("Hello, this is an {message}!");

message = "fatal error";
fatal!("Hello, this is a {message}!")

Creating a Logger struct and printing out some logs:

// Create a `Logger` instance with default configuration
let mut logger = Logger::default();

// Print log messages
logger.debug("debug message");
logger.info("info message");
logger.warning("warning message");
logger.error("error message");
logger.fatal("fatal error message");

Configuring the formatter of a Logger:

// Create a `Logger` instance with default configuration
let mut logger = Logger::default();

// Set a simple log format
logger.formatter.lock().unwrap().set_log_format("[ %d ] %m");

// Change debug log header color
logger.formatter.lock().unwrap().set_debug_color(Color::Red);

// Set a fatal log header
logger.formatter.lock().unwrap().set_fatal_header("--FATAL--");

// Configure datetime format
logger.formatter.lock().unwrap().set_datetime_format("%H:%M");

Enabling log buffering:

// Create a `Logger` instance with default configuration
let mut logger = Logger::default();

// Enable log buffering
logger.output.buffer_output.lock().unwrap().enable();

// Write to the log buffer 128 times
for i in 0..128 {
    logger.error(&format!("Error number {}", i));
}

// Get a reference to the log buffer
let buffer = logger.output.buffer_output.lock().unwrap().get_log_buffer();

Enabling file logging:

// Create a `Logger` instance with default configuration
let mut logger = Logger::default();

// Lock the file output and obtain a reference to it
let mut file_output = logger.output.file_output.lock().unwrap();

// Required by `FileStream` for parsing logs
let mut formatter = LogFormatter::default();

// Set the log file path **first**
file_output.set_log_file_path(&path)
    .expect("Failed to set the log file path!");

// Enable the output
file_output.enable().
    expect("Failed to enable the output!");

// Write to the log file buffer
file_output.out(&LogStruct::debug("Hello from file!"),
    &mut formatter).expect("Failed to write to the buffer!");

// Flush the logs from the buffer to the log file
file_output.flush();

Fields§

§formatter: Mutex<LogFormatter>§output: LogOutput

Implementations§

Source§

impl Logger

Source

pub fn from_template_str(template: &str) -> Result<Logger, Error>

Creates a Logger instance from a JSON template as string.

§Examples

Deserializing Logger from a JSON string:

let pretty_json = serde_json::to_string_pretty(&Logger::default())
    .expect("Failed to serialize logger!");

let mut logger = Logger::from_template_str(&pretty_json)
    .expect("Failed to deserialize logger!");
Source

pub fn from_template(path: &str) -> Result<Logger, Error>

Creates a Logger instance from a template file.

§Examples

Deserializing Logger from a JSON file:

let mut logger = Logger::from_template(path)
    .expect("Failed to deserialize logger!");
Source

pub fn save_template(&self, path: &str) -> Result<(), Error>

Saves a Logger instance to template file.

§Examples

Serializing a Logger instance to a file:

let mut logger = Logger::default();
logger.save_template(path);
    .expect("Failed to deserialize logger!"), Logger::default());
Source§

impl Logger

Source

pub fn debug(&self, message: &str)

Prints a debug message.

Source

pub fn info(&self, message: &str)

Prints an informational message.

Source

pub fn warning(&self, message: &str)

Prints a warning.

Source

pub fn error(&self, message: &str)

Prints an error.

Source

pub fn fatal(&self, message: &str)

Prints a fatal error.

Source

pub fn set_verbosity<I: Into<Verbosity>>(&mut self, verbosity: I)

Sets Logger verbosity.

§Examples

Setting Logger verbosity:

logger.set_verbosity(Verbosity::Quiet);
Source

pub fn enable_log_filtering(&mut self)

Enables log filtering.

Source

pub fn disable_log_filtering(&mut self)

Disables log filtering.

Trait Implementations§

Source§

impl Debug for Logger

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Logger

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Logger

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Drop for Logger

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl PartialEq for Logger

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for Logger

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl !Freeze for Logger

§

impl RefUnwindSafe for Logger

§

impl Send for Logger

§

impl Sync for Logger

§

impl Unpin for Logger

§

impl UnwindSafe for Logger

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,