use std::{ffi::CString, io::Write}; use winapi::um::debugapi::OutputDebugStringA; #[derive(Debug)] pub struct Logger {} impl Write for Logger { fn write(&mut self, buf: &[u8]) -> std::io::Result { if let Ok(c_str) = CString::new(buf) { unsafe { OutputDebugStringA(c_str.as_ptr()) } } std::io::stdout().write(buf) } fn flush(&mut self) -> std::io::Result<()> { std::io::stdout().flush() } } pub fn init_logger() { env_logger::builder() .filter_level(::log::LevelFilter::Error) .filter_module( "chuniio-tasoller", if cfg!(debug_assertions) { ::log::LevelFilter::Debug } else { ::log::LevelFilter::Info }, ) .parse_default_env() .target(env_logger::Target::Pipe(Box::new(Logger {}))) .format(|f, record| { let target = record.target(); let level = record.level(); writeln!(f, "{} {} -> {}", level, target, record.args()) }) .init(); }