add_determinism/
simplelog.rs

1/* SPDX-License-Identifier: GPL-3.0-or-later */
2
3use 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    /// Create new kernel logger with error level filter
14    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
44/// Set up logger with specified error level as the default logger
45pub 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}