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;