Skip to main content

kobo_core/
logger.rs

1pub const KLOG: &str = "/mnt/onboard/.adds/kothok.log";
2
3pub struct FileLogger;
4impl log::Log for FileLogger {
5    fn log(&self, record: &log::Record) {
6        use std::io::Write;
7        let args = record.args().to_string();
8        if args.contains("estimating duration") || args.contains("edge-tts WS connected") {
9            return;
10        }
11        let ts = std::time::SystemTime::now()
12            .duration_since(std::time::UNIX_EPOCH)
13            .map(|d| {
14                let s = d.as_secs();
15                format!(
16                    "{:02}:{:02}:{:02}.{:03}",
17                    (s / 3600) % 24,
18                    (s / 60) % 60,
19                    s % 60,
20                    d.subsec_millis()
21                )
22            })
23            .unwrap_or_else(|_| "??:??:??.???".into());
24        if let Ok(mut f) = std::fs::OpenOptions::new()
25            .create(true)
26            .append(true)
27            .open(KLOG)
28        {
29            // best-effort: a failed log write has no recourse - cannot log a logging failure
30            let _ = writeln!(f, "{} {:<5} {}", ts, record.level(), args);
31            if record.level() <= log::Level::Info {
32                // best-effort: sync failure means the log line may not survive a crash reboot
33                let _ = f.sync_data();
34            }
35        }
36    }
37    fn enabled(&self, _: &log::Metadata) -> bool {
38        true
39    }
40    fn flush(&self) {}
41}