Skip to main content

kobo_core/
logger.rs

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