bindizr_core/logger/
mod.rs1use std::io::{self, Write};
2
3use log::{Level, Metadata, Record};
4
5use crate::config;
6
7#[macro_export]
8macro_rules! log_error {
9 ($($arg:tt)*) => {
10 log::error!($($arg)*)
11 };
12}
13
14#[macro_export]
15macro_rules! log_warn {
16 ($($arg:tt)*) => {
17 log::warn!($($arg)*)
18 };
19}
20
21#[macro_export]
22macro_rules! log_info {
23 ($($arg:tt)*) => {
24 log::info!($($arg)*)
25 };
26}
27
28#[macro_export]
29macro_rules! log_debug {
30 ($($arg:tt)*) => {
31 log::debug!($($arg)*)
32 };
33}
34
35#[macro_export]
36macro_rules! log_trace {
37 ($($arg:tt)*) => {
38 log::trace!($($arg)*)
39 };
40}
41
42pub struct Logger {
43 log_level: Level,
44}
45
46impl log::Log for Logger {
47 fn enabled(&self, metadata: &Metadata) -> bool {
48 metadata.level() <= self.log_level
49 }
50
51 fn log(&self, record: &Record) {
52 if self.enabled(record.metadata()) {
53 let log_message = if self.log_level == Level::Debug {
54 format!(
56 "{} - {}: {}\n",
57 record.level(),
58 record.target(),
59 record.args()
60 )
61 } else {
62 format!("{}: {}\n", record.level(), record.args())
64 };
65
66 eprint!("{}", log_message);
68 }
69 }
70
71 fn flush(&self) {
72 let _ = io::stderr().flush();
73 }
74}
75
76pub fn initialize() {
77 let log_level = match config::get_bindizr_config().logging.log_level {
78 config::LogLevel::Error => Level::Error,
79 config::LogLevel::Warn => Level::Warn,
80 config::LogLevel::Debug => Level::Debug,
81 config::LogLevel::Trace => Level::Trace,
82 config::LogLevel::Info => Level::Info,
83 };
84
85 let logger = Logger { log_level };
86
87 if let Err(e) = log::set_boxed_logger(Box::new(logger)) {
88 eprintln!("Failed to set logger: {}", e);
89 return;
90 }
91 log::set_max_level(log_level.to_level_filter());
92
93 println!("Console logging level: {}", log_level);
94}