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