From 53a807af083e7def4e863baecee568eef6020fff Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Mon, 10 Nov 2025 09:23:58 +0800 Subject: Rename build_env_logger module to logger and improve path handling --- src/utils/build_env_logger.rs | 66 ------------------------------------ src/utils/logger.rs | 79 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 66 deletions(-) delete mode 100644 src/utils/build_env_logger.rs create mode 100644 src/utils/logger.rs diff --git a/src/utils/build_env_logger.rs b/src/utils/build_env_logger.rs deleted file mode 100644 index 51af4c4..0000000 --- a/src/utils/build_env_logger.rs +++ /dev/null @@ -1,66 +0,0 @@ -use std::path::Path; - -use colored::Colorize; -use env_logger::{Builder, Target}; -use log::{Level, LevelFilter}; - -pub fn build_env_logger(log_path: impl AsRef) { - use std::io::{self, Write}; - - struct MultiWriter { - a: A, - b: B, - } - - impl MultiWriter { - fn new(a: A, b: B) -> Self { - Self { a, b } - } - } - - impl Write for MultiWriter { - fn write(&mut self, buf: &[u8]) -> io::Result { - let _ = self.a.write(buf); - self.b.write(buf) - } - - fn flush(&mut self) -> io::Result<()> { - let _ = self.a.flush(); - self.b.flush() - } - } - - let mut builder = Builder::new(); - - let log_format = |buf: &mut env_logger::fmt::Formatter, record: &log::Record| { - let now = chrono::Local::now(); - - let level_style = match record.level() { - Level::Error => record.args().to_string().red().bold(), - Level::Warn => record.args().to_string().yellow().bold(), - Level::Info => record.args().to_string().white(), - Level::Debug => record.args().to_string().white(), - Level::Trace => record.args().to_string().cyan(), - }; - - writeln!( - buf, - "{} {}", - now.format("%H:%M:%S") - .to_string() - .truecolor(105, 105, 105) - .bold(), - level_style - ) - }; - - let log_file = std::fs::File::create(log_path).expect("Failed to create log file"); - let combined_target = Target::Pipe(Box::new(MultiWriter::new(std::io::stdout(), log_file))); - - builder - .format(log_format) - .filter(None, LevelFilter::Info) - .filter_module("just_enough_vcs", LevelFilter::Trace) - .target(combined_target) - .init(); -} diff --git a/src/utils/logger.rs b/src/utils/logger.rs new file mode 100644 index 0000000..e1b9e65 --- /dev/null +++ b/src/utils/logger.rs @@ -0,0 +1,79 @@ +use std::path::Path; + +use colored::Colorize; +use env_logger::{Builder, Target}; +use just_enough_vcs::utils::string_proc::format_path::format_path; +use log::{Level, LevelFilter}; + +pub fn build_env_logger(log_path: impl AsRef) { + use std::io::{self, Write}; + + struct MultiWriter { + a: A, + b: B, + } + + impl MultiWriter { + fn new(a: A, b: B) -> Self { + Self { a, b } + } + } + + impl Write for MultiWriter { + fn write(&mut self, buf: &[u8]) -> io::Result { + let _ = self.a.write(buf); + self.b.write(buf) + } + + fn flush(&mut self) -> io::Result<()> { + let _ = self.a.flush(); + self.b.flush() + } + } + + let log_path = { + let path = log_path.as_ref(); + let Ok(path) = format_path(path) else { + eprintln!( + "Build logger failed: {} is not a vaild path.", + path.display() + ); + return; + }; + path + }; + + let mut builder = Builder::new(); + + let log_format = |buf: &mut env_logger::fmt::Formatter, record: &log::Record| { + let now = chrono::Local::now(); + + let level_style = match record.level() { + Level::Error => record.args().to_string().red().bold(), + Level::Warn => record.args().to_string().yellow().bold(), + Level::Info => record.args().to_string().white(), + Level::Debug => record.args().to_string().white(), + Level::Trace => record.args().to_string().cyan(), + }; + + writeln!( + buf, + "{} {}", + now.format("%H:%M:%S") + .to_string() + .truecolor(105, 105, 105) + .bold(), + level_style + ) + }; + + let log_file = std::fs::File::create(log_path).expect("Failed to create log file"); + let combined_target = Target::Pipe(Box::new(MultiWriter::new(std::io::stdout(), log_file))); + + builder + .format(log_format) + .filter(None, LevelFilter::Info) + .filter_module("just_enough_vcs", LevelFilter::Trace) + .target(combined_target) + .init(); +} -- cgit