1pub 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 let _ = writeln!(f, "{} {:<5} {}", ts, record.level(), args);
33 if record.level() <= log::Level::Info {
34 let _ = f.sync_data();
36 }
37 }
38 }
39 fn enabled(&self, _: &log::Metadata) -> bool {
40 true
41 }
42 fn flush(&self) {}
43}