hyperlane_cli/logger/
impl.rs1use crate::*;
2
3impl log::Log for Logger {
5 fn enabled(&self, metadata: &log::Metadata) -> bool {
15 metadata.level() <= log::max_level()
16 }
17
18 fn log(&self, record: &log::Record) {
24 if !self.enabled(record.metadata()) {
25 return;
26 }
27 let now_time: String = color_output::time();
28 let level: log::Level = record.level();
29 let args: &std::fmt::Arguments<'_> = record.args();
30 let file: Option<&str> = record.file();
31 let module_path: Option<&str> = record.module_path();
32 let target: &str = record.target();
33 let line: u32 = record.line().unwrap_or_default();
34 let location: &str = file.unwrap_or(module_path.unwrap_or(target));
35 let time_text: String = format!("{LOG_SPACE}{now_time}{LOG_SPACE}");
36 let level_text: String = format!("{LOG_SPACE}{level}{LOG_SPACE}");
37 let args_text: String = format!("{args}{LOG_SPACE}");
38 let location_text: String = format!("{LOG_SPACE}{location}{LOG_COLON}{line}{LOG_SPACE}");
39 let color: ColorType = match record.level() {
40 log::Level::Trace => ColorType::Use(Color::Magenta),
41 log::Level::Debug => ColorType::Use(Color::Cyan),
42 log::Level::Info => ColorType::Use(Color::Green),
43 log::Level::Warn => ColorType::Use(Color::Yellow),
44 log::Level::Error => ColorType::Use(Color::Red),
45 };
46 let mut time_output_builder: ColorOutputBuilder<'_> = ColorOutputBuilder::new();
47 let mut level_output_builder: ColorOutputBuilder<'_> = ColorOutputBuilder::new();
48 let mut location_output_builder: ColorOutputBuilder<'_> = ColorOutputBuilder::new();
49 let mut args_output_builder: ColorOutputBuilder<'_> = ColorOutputBuilder::new();
50 let time_output: ColorOutput<'_> = time_output_builder
51 .text(&time_text)
52 .bold(true)
53 .color(ColorType::Use(Color::White))
54 .bg_color(ColorType::Use(Color::Black))
55 .build();
56 let level_output: ColorOutput<'_> = level_output_builder
57 .text(&level_text)
58 .bold(true)
59 .color(ColorType::Use(Color::White))
60 .bg_color(color)
61 .build();
62 let location_output: ColorOutput<'_> = location_output_builder
63 .text(&location_text)
64 .bold(true)
65 .color(color)
66 .build();
67 let args_output: ColorOutput<'_> = args_output_builder
68 .text(&args_text)
69 .bold(true)
70 .color(color)
71 .endl(true)
72 .build();
73 ColorOutputListBuilder::new()
74 .add(time_output)
75 .add(level_output)
76 .add(location_output)
77 .add(args_output)
78 .run();
79 }
80
81 fn flush(&self) {}
83}
84
85impl Logger {
87 pub fn init(level_filter: log::LevelFilter) {
93 let _ = log::set_logger(&LOGGER);
94 log::set_max_level(level_filter);
95 }
96}