【Rust】Log出力を実装する

log = “0.4.25”
env_logger = “0.11.6”

use env_logger;
use log::{error, warn, info, debug};
use std::env;

fn main() {
    env::set_var("RUST_LOG", "info");
    env_logger::init();
    
    debug!("debugです");
    info!("infoです");
    warn!("warnです");
    error!("errorです");
}

[2025-02-14T07:29:59Z INFO app] infoです
[2025-02-14T07:29:59Z WARN app] warnです
[2025-02-14T07:29:59Z ERROR app] errorです

上記でも良いんだけど、log、env_logger使わずに、普通にchronoとFileだけで良い気がする。

use std::path::Path;
use chrono::{Utc, DateTime};
use std::fs::File;
use std::fs::OpenOptions;
use std::io::Write;

fn main() {
    log_output("this is test".to_string());
}

fn log_output(message: String) {
    let utc_datetime: DateTime<Utc> = Utc::now();
    let t: String = utc_datetime.to_string();
    let filename = format!("./log/{}.txt",&t[0..7]);

    let log_message = format!("[{}] {}", &t[0..19], message);
    println!("{}", log_message);

    if !Path::new(&filename).is_file() {
        let _ = File::create(&filename);
    }
    let mut file_ref = OpenOptions::new()
                        .append(true)
                        .open(filename)
                        .expect("Unable to open file");

    file_ref.write_all(&log_message.as_bytes()).expect("write failed");
    file_ref.write_all(b"\n").expect("write failed");
}

Compiling app v0.1.0 (/home/vagrant/dev/rust/app)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.54s
Running `target/debug/app`
[2025-02-14 07:58:05] this is test