ttpgen/logging.rs
1// Std library
2use std::fs::OpenOptions;
3use std::io::Write;
4
5// External crates
6use chrono::Local;
7use env_logger::{Builder, Target};
8use log::{LevelFilter};
9
10/// Initializes the logger to write messages to console and the file.
11///
12/// The logger prints messages with a timestamp and log level (info!).
13/// Logging can be globally enabled or disabled using the `LOGS_ENABLED` flag
14/// in this class.
15///
16/// # Arguments
17/// * `log_file` - A string representing the path of the file where logs will be saved.
18///
19/// # Panics
20/// This function will panic if the log file cannot be created or written.
21///
22/// # Example
23/// ```
24/// // Initialize logger before generating solutions
25/// init_logger("experiment.log");
26/// info!("Logger initialized!");
27/// ```
28pub fn init_logger(log_file: &str, enable: bool) {
29 if !enable{
30 return;
31 }
32
33 let file = OpenOptions::new()
34 .create(true)
35 .append(true)
36 .open(log_file)
37 .unwrap();
38
39 Builder::new()
40 .format(move |_buf, record| {
41 let timestamp = Local::now().format("%H:%M:%S");
42 let line = format!("[{}][{}] {}\n", timestamp, record.level(), record.args());
43
44 print!("{}", line);
45
46 let mut f = &file;
47 f.write_all(line.as_bytes()).unwrap();
48 Ok(())
49 })
50 .filter_level(LevelFilter::Info)
51 .target(Target::Stdout)
52 .init();
53}