Skip to main content

rotation_logger/
lib.rs

1//! # Simple file rotation logger.
2//!
3//! This logger safe to use with threads as argument, or as macros.
4//!
5//! Example:
6//!
7//! ```
8//! use std::{
9//!     thread::{self, sleep},
10//!     time::Duration,
11//! };
12//!
13//! use rotation_logger::{FileSize, Logger, OutputChannel, MessageFormatter, Settings, log};
14//!
15//! fn main() {
16//!     let formatter = MessageFormatter::new(
17//!         "::",
18//!         "{timestamp:-6:30:right}{splitter}{modules:_:_:left}{splitter}{message}",
19//!         "%Y-%m-%d %H:%M:%S.%f",
20//!     );
21//!
22//!     let output = OutputChannel::file(
23//!         "./logs".into(),
24//!         10,
25//!         FileSize::from_kilobytes(1),
26//!         "new_logger".into(),
27//!         "log".into(),
28//!     );
29//!
30//!     let settings = Settings::new(true, 5, output, formatter);
31//!
32//!     let logger = Logger::new(settings);
33//!     let joiner = logger.run_async();
34//!
35//!     let logger_logger_01 = logger.clone();
36//!     let logger_logger_02 = logger.clone();
37//!     let _ = thread::spawn(move || {
38//!         logger_logger_01.log(&vec!["THREAD1".into(), "MAIN".into()], "Starting...");
39//!
40//!         let mut counter = 0;
41//!         loop {
42//!             logger_logger_01.log(
43//!                 &vec!["THREAD1".into(), "WORKER".into()],
44//!                 format!("Processing Job: {counter}").as_str(),
45//!             );
46//!             counter += 1;
47//!             sleep(Duration::from_secs(1));
48//!         }
49//!     });
50//!
51//!     let _ = thread::spawn(move || {
52//!         logger_logger_02.log(&vec!["THREAD2".into(), "MAIN".into()], "Starting...");
53//!
54//!         let mut counter = 0;
55//!         loop {
56//!             logger_logger_02.log(
57//!                 &vec!["THREAD2".into(), "WORKER".into()],
58//!                 format!("Processing Job: {counter}").as_str(),
59//!             );
60//!             counter += 2;
61//!             sleep(Duration::from_millis(400));
62//!         }
63//!     });
64//!
65//!     let _ = thread::spawn(move || {
66//!         log!("Starting...");
67//!
68//!         let mut counter = 0;
69//!         loop {
70//!             log!(format!("Try Process Job: {counter}").as_str());
71//!
72//!             // Log as text
73//!             log!(
74//!                 ["THREAD3", "MODULE1"],
75//!                 format!("Try Process Job: {counter}").as_str()
76//!             );
77//!             let module_str = "RAW_MODULE";
78//!             let thread3_str = "THREAD3";
79//!
80//!             // Log from vars
81//!             log!(
82//!                 [thread3_str, module_str],
83//!                 format!("Try Process Job: {counter}").as_str()
84//!             );
85//!
86//!             // Log as ident
87//!             log!((RAW_MODULE, RAW_MODULE2, RAW_MODULE3), "some");
88//!             counter += 2;
89//!             sleep(Duration::from_millis(400));
90//!         }
91//!     });
92//!
93//!     match joiner {
94//!         Some(j) => {
95//!             let _ = j.join();
96//!         }
97//!         None => {}
98//!     };
99//! }
100//!
101//! ```
102//!
103//!
104
105pub use crate::rotation_logger::FileSettings;
106pub use crate::rotation_logger::FileSize;
107pub use crate::rotation_logger::LOG_SENDER;
108pub use crate::rotation_logger::Logger;
109pub use crate::rotation_logger::Message;
110pub use crate::rotation_logger::MessageFormatter;
111pub use crate::rotation_logger::OutputChannel;
112pub use crate::rotation_logger::Settings;
113
114mod rotation_logger;