add_determinism/
simplelog.rs1use log::debug;
4use std::io::{self, Write};
5use std::process;
6
7pub struct SimpleLog {
8 level: log::LevelFilter,
9 show_pid: bool,
10}
11
12impl SimpleLog {
13 pub fn new(level: log::LevelFilter, show_pid: bool) -> SimpleLog {
15 SimpleLog {
16 level,
17 show_pid,
18 }
19 }
20}
21
22impl log::Log for SimpleLog {
23 fn enabled(&self, meta: &log::Metadata) -> bool {
24 meta.level() <= self.level
25 }
26
27 fn log(&self, record: &log::Record) {
28 if record.level() > self.level {
29 return;
30 }
31
32 let mut stdout = io::stdout().lock();
33 if self.show_pid {
34 let _ = writeln!(stdout, "[{}] {}", process::id(), record.args());
35 } else {
36 let _ = writeln!(stdout, "{}", record.args());
37 };
38 let _ = stdout.flush();
39 }
40
41 fn flush(&self) {}
42}
43
44pub fn init(level: log::LevelFilter, show_pid: bool) -> Result<(), log::SetLoggerError> {
46 log::set_boxed_logger(Box::new(SimpleLog::new(level, show_pid)))?;
47 log::set_max_level(level);
48
49 debug!("Initialized logging with log level {level}");
50
51 Ok(())
52}