logging/lib.rs
1#![warn(missing_docs)]
2//! A small logging library inspired by Python's `logging` module.
3//!
4//! The pieces fit together as a pipeline:
5//!
6//! - [`Logger`] is the user-facing entry point (`info`, `warning`, ...). It
7//! owns a level and a set of handlers, and builds a [`Record`] per call.
8//! - [`Handler`] is a sink (e.g. [`StreamHandler`]) that renders a record with
9//! its [`Formatter`] and writes it somewhere.
10//! - [`Formatter`] turns a [`Record`] into a string from a pattern like
11//! `"%(timestamp) - %(level) - %(message)"`.
12//! - [`Level`] is the severity enum; records below a logger's level are dropped.
13//!
14//! Loggers are stored in a process-global registry, so [`Logger::get`] returns
15//! a shared logger by name, and [`Logger::root`] is the parent of all loggers.
16//!
17//! ```
18//! use logging::{Formatter, Logger, StreamHandler};
19//!
20//! let logger = Logger::get("example");
21//! logger
22//! .add_handler(StreamHandler::with_pattern(std::io::stdout(), "%(level): %(message)"))
23//! .unwrap();
24//! logger.info("hello");
25//! ```
26
27mod formatter;
28mod handler;
29mod logger;
30mod types;
31
32pub use formatter::Formatter;
33pub use handler::{Handler, StreamHandler};
34pub use logger::Logger;
35pub use types::{Level, ParseLevelError, Record};