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
use std::sync::{Arc, Mutex};
pub fn new_dispatcher(function: Box<dyn Fn(crate::Log) + Send>) -> super::Dispatcher {
return Arc::new(Mutex::new(function));
}
pub fn new_dropper(function: Box<dyn Fn(&super::Logger) + Send>) -> super::Dropper {
return Some(Arc::new(Mutex::new(function)));
}
pub fn concurrent_logger_from(logger: super::Logger) -> super::ConcurrentLogger {
return Arc::new(Mutex::new(logger));
}
pub fn push(
logger: &super::ConcurrentLogger,
attributes: Vec<(String, String)>,
content: Option<&str>,
) {
match logger.lock() {
Ok(logger) => {
logger.push(attributes, content);
}
Err(_) => {
eprintln!(
"ERROR: unable to push following log :\n{}",
crate::Log::from((attributes, content))
);
}
}
}