diff_tool/services/
logger.rs1use log::LevelFilter;
2use std::{
3 io::Write,
4 sync::{Arc, Mutex},
5};
6
7pub type Logs = Arc<Mutex<Vec<String>>>;
8
9pub struct VecWriter {
10 logs: Logs,
11}
12
13impl Write for VecWriter {
14 fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
15 let msg = String::from_utf8_lossy(buf);
16 let mut logs = self.logs.lock().unwrap();
17 logs.push(msg.into_owned());
18
19 Ok(buf.len())
20 }
21
22 fn flush(&mut self) -> std::io::Result<()> {
23 Ok(())
24 }
25}
26
27impl VecWriter {
28 pub fn new(logs: Logs) -> Self {
29 Self { logs }
30 }
31}
32
33pub fn init_logging(writer: VecWriter, level: LevelFilter) {
34 env_logger::Builder::new()
35 .target(env_logger::Target::Pipe(Box::new(writer)))
36 .filter(None, level)
37 .format(|buf, record| writeln!(buf, "[{}] - {}", record.level(), record.args()))
38 .init()
39}