diff options
| author | 魏曹先生 <1992414357@qq.com> | 2025-10-18 18:23:15 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2025-10-18 18:23:15 +0800 |
| commit | 5830cb1e94e63f1aa5fd954f20ec36e38e118381 (patch) | |
| tree | fb32b85123764f055924222d37a4e8efcf92599b /src | |
| parent | 084854a8f931604fe3180793a736d40ff437f6be (diff) | |
feat: add new binary files and utilities
- Add jvref.rs binary
- Add build_env_logger.rs utility module
Diffstat (limited to 'src')
| -rw-r--r-- | src/bin/jvref.rs | 7 | ||||
| -rw-r--r-- | src/utils/build_env_logger.rs | 66 |
2 files changed, 73 insertions, 0 deletions
diff --git a/src/bin/jvref.rs b/src/bin/jvref.rs new file mode 100644 index 0000000..a8b0a1f --- /dev/null +++ b/src/bin/jvref.rs @@ -0,0 +1,7 @@ +// Import i18n files +rust_i18n::i18n!("locales", fallback = "en"); + +#[tokio::main] +async fn main() { + println!("Hello, World!") +} diff --git a/src/utils/build_env_logger.rs b/src/utils/build_env_logger.rs new file mode 100644 index 0000000..51af4c4 --- /dev/null +++ b/src/utils/build_env_logger.rs @@ -0,0 +1,66 @@ +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<Path>) { + use std::io::{self, Write}; + + struct MultiWriter<A, B> { + a: A, + b: B, + } + + impl<A: Write, B: Write> MultiWriter<A, B> { + fn new(a: A, b: B) -> Self { + Self { a, b } + } + } + + impl<A: Write, B: Write> Write for MultiWriter<A, B> { + fn write(&mut self, buf: &[u8]) -> io::Result<usize> { + 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(); +} |
