main: add a separate logfile to the logger

This commit is contained in:
2026-06-11 21:40:20 +02:00
parent 110bc2cbbe
commit 5784c2440a
+9 -7
View File
@@ -1,4 +1,4 @@
use std::sync::Arc;
use std::sync::{Arc, Mutex};
use async_openai::types::chat::ChatCompletionRequestMessage;
use serde::{Deserialize, Serialize};
@@ -66,9 +66,9 @@ impl SaveData {
}
}
struct SysMessageLogger(Arc<tokio::sync::mpsc::UnboundedSender<String>>);
struct SysMessageLogger<T>(Arc<tokio::sync::mpsc::UnboundedSender<String>>, Mutex<T>);
impl log::Log for SysMessageLogger {
impl<T: std::io::Write + Send + Sync> log::Log for SysMessageLogger<T> {
fn enabled(&self, _metadata: &log::Metadata) -> bool {
true
}
@@ -76,7 +76,9 @@ impl log::Log for SysMessageLogger {
fn flush(&self) {}
fn log(&self, record: &log::Record) {
self.0.send(format!("{}", record.args())).unwrap();
let msg = format!("{}", record.args());
write!(self.1.lock().unwrap(), "{}\n", msg).unwrap();
self.0.send(msg).unwrap();
}
}
@@ -95,10 +97,10 @@ async fn main() {
let (sys_message_sink, sys_message_src) = tokio::sync::mpsc::unbounded_channel();
static LOGGER: StaticCell<SysMessageLogger> = StaticCell::new();
let logger = LOGGER.init(SysMessageLogger(Arc::new(sys_message_sink)));
static LOGGER: StaticCell<SysMessageLogger<std::fs::File>> = StaticCell::new();
let logger = LOGGER.init(SysMessageLogger(Arc::new(sys_message_sink), Mutex::new(std::fs::File::create("out.log").unwrap())));
log::set_logger(logger).unwrap();
log::set_max_level(log::LevelFilter::Info);
log::set_max_level(log::LevelFilter::Debug);
dotenv::dotenv().ok();