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}