actix_cloud_extra/
logger.rs1use std::path::PathBuf;
2
3use actix_cloud::{
4 logger::{LogItem, Logger, LoggerBuilder, LoggerGuard},
5 tracing::Level,
6};
7
8fn transformer(mut item: LogItem) -> LogItem {
9 item.target = item
12 .target
13 .split("::")
14 .next()
15 .unwrap_or("unknown")
16 .to_owned();
17
18 if let Some(filename) = &item.filename {
21 let mut buf = Vec::new();
22 let s = PathBuf::from(filename);
23 for i in s.iter().rev() {
24 buf.push(i);
25 if i.eq_ignore_ascii_case("src") {
26 break;
27 }
28 }
29 let mut s = PathBuf::new();
30 for i in buf.into_iter().rev() {
31 s.push(i);
32 }
33 item.filename = Some(s.to_string_lossy().into());
34 }
35 item
36}
37
38pub fn start_logger(
39 enable: bool,
40 json: bool,
41 verbose: bool,
42 filter: fn(item: &LogItem) -> bool,
43) -> (Option<Logger>, Option<LoggerGuard>) {
44 if enable {
45 let mut builder = LoggerBuilder::new();
46 if json {
47 builder = builder.json();
48 }
49 if verbose {
50 builder = builder.filename().line_number().level(Level::DEBUG);
51 }
52 builder = builder.transformer(transformer).filter(filter);
53 let (logger, guard) = builder.start();
54 (Some(logger), Some(guard))
55 } else {
56 (None, None)
57 }
58}