rf_logger/lib.rs
1
2//! A simple logger that can log to stdout, stderr and rotated files, for use
3//! with the logging facade exposed by the [`log` crate][log-crate-url].
4//!
5//! ## Example
6//!
7//! ```
8//! use log::{LevelFilter, info};
9//! use rf_logger;
10//!
11//! rf_logger::Builder::new()
12//! .max_level(LevelFilter::Debug)
13//! .stdout()
14//! .rotated_file("tests/demo.log", 5 * 1024, 3)
15//! .init();
16//!
17//! info!("Hello, rf_logger");
18//! info!("Bye");
19//! ```
20//!
21//! ## Enabling logging
22//!
23//! Log levels are controlled on a per-module basis, and **by default all
24//! logging is disabled except for the `error` level**.
25//!
26//! Log levels should be set by `Builder::max_level()`
27//!
28//! ## Formatting
29//!
30//! Time formatting string can be set via `Builder::time_fmt()` while other
31//! parts are fixed.
32//!
33//! ```text
34//! let _ = writeln!(
35//! buf,
36//! "{} - {} - {}",
37//! now.format(&self.time_fmt),
38//! record.level(),
39//! record.args()
40//! );
41//! ```
42//!
43//! ## Notes
44//!
45//! There is a mutex lock during every log record beening handled,
46//! if performance is what your concern this crate may not be a good choice.
47//!
48//! [log-crate-url]: https://docs.rs/log/
49
50mod logger;
51mod targets;
52
53pub use logger::Builder;
54
55#[cfg(test)]
56mod tests {
57 use super::*;
58
59 #[test]
60 fn all() {
61 Builder::new()
62 .max_level(log::LevelFilter::Debug)
63 .stdout()
64 .rotated_file("tests/test.log", 5 * 1024, 3)
65 .init();
66
67 log::info!("Hello, rf_logger");
68 log::info!("Bye");
69 }
70}