From 14a13f44bbe2c8cf7f3e684ff1475c52c0a44167 Mon Sep 17 00:00:00 2001 From: PandaDEV <70103896+0PandaDEV@users.noreply.github.com> Date: Mon, 16 Dec 2024 23:53:29 +1000 Subject: [PATCH] feat: add logging for debugging --- src-tauri/Cargo.lock | 1 + src-tauri/Cargo.toml | 1 + src-tauri/src/main.rs | 2 ++ src-tauri/src/utils/logger.rs | 49 +++++++++++++++++++++++++++++++++++ src-tauri/src/utils/mod.rs | 1 + 5 files changed, 54 insertions(+) create mode 100644 src-tauri/src/utils/logger.rs diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 7293135..a05f2b9 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -4187,6 +4187,7 @@ dependencies = [ "image", "include_dir", "lazy_static", + "log", "rand 0.8.5", "rdev", "regex", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index ce4353d..fc33f12 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -40,6 +40,7 @@ lazy_static = "1.5.0" time = "0.3.37" global-hotkey = "0.6.3" chrono = { version = "0.4.39", features = ["serde"] } +log = { version = "0.4.22", features = ["std"] } uuid = "1.11.0" active-win-pos-rs = "0.8.3" include_dir = "0.7.4" diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 36a3072..26d1048 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -34,6 +34,8 @@ fn main() { ) .setup(|app| { let app_data_dir = app.path().app_data_dir().unwrap(); + utils::logger::init_logger(&app_data_dir).expect("Failed to initialize logger"); + fs::create_dir_all(&app_data_dir).expect("Failed to create app data directory"); let db_path = app_data_dir.join("data.db"); diff --git a/src-tauri/src/utils/logger.rs b/src-tauri/src/utils/logger.rs new file mode 100644 index 0000000..d2f1442 --- /dev/null +++ b/src-tauri/src/utils/logger.rs @@ -0,0 +1,49 @@ +use chrono; +use log::{LevelFilter, SetLoggerError}; +use std::fs::{File, OpenOptions}; +use std::io::Write; + +pub struct FileLogger { + file: File, +} + +impl log::Log for FileLogger { + fn enabled(&self, _metadata: &log::Metadata) -> bool { + true + } + + fn log(&self, record: &log::Record) { + if self.enabled(record.metadata()) { + let mut file = self.file.try_clone().expect("Failed to clone file handle"); + writeln!( + file, + "{} - {}: {}", + chrono::Local::now().format("%Y-%m-%d %H:%M:%S"), + record.level(), + record.args() + ) + .expect("Failed to write to log file"); + } + } + + fn flush(&self) { + self.file.sync_all().expect("Failed to flush log file"); + } +} + +pub fn init_logger(app_data_dir: &std::path::Path) -> Result<(), SetLoggerError> { + let logs_dir = app_data_dir.join("logs"); + std::fs::create_dir_all(&logs_dir).expect("Failed to create logs directory"); + + let log_path = logs_dir.join("app.log"); + let file = OpenOptions::new() + .create(true) + .append(true) + .open(log_path) + .expect("Failed to open log file"); + + let logger = Box::new(FileLogger { file }); + unsafe { log::set_logger_racy(Box::leak(logger))? }; + log::set_max_level(LevelFilter::Debug); + Ok(()) +} diff --git a/src-tauri/src/utils/mod.rs b/src-tauri/src/utils/mod.rs index 5ff2fca..b888b1f 100644 --- a/src-tauri/src/utils/mod.rs +++ b/src-tauri/src/utils/mod.rs @@ -1,3 +1,4 @@ pub mod commands; pub mod favicon; pub mod types; +pub mod logger;