lowkey improve logging
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
use crate::util::{
|
||||
consts::game::{EXE_ENHANCED, EXE_LEGACY},
|
||||
countdown::Countdown,
|
||||
log,
|
||||
system_info::SystemInfo,
|
||||
};
|
||||
use std::time::{Duration, Instant};
|
||||
@@ -65,8 +64,7 @@ pub fn activate(game_handle: &mut HANDLE, system_info: &mut SystemInfo) -> Resul
|
||||
match unsafe { OpenProcess(PROCESS_SUSPEND_RESUME, false, pid) } {
|
||||
Ok(handle) => *game_handle = handle,
|
||||
Err(why) => {
|
||||
let message = format!("failed to suspend game for empty session:\n{why}");
|
||||
log::log(log::LogLevel::Error, &message);
|
||||
log::error!("failed to suspend game for empty session:\n{why}");
|
||||
return Err(());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
use crate::util::{
|
||||
consts::game::{EXE_ENHANCED, EXE_LEGACY},
|
||||
log,
|
||||
system_info::SystemInfo,
|
||||
};
|
||||
use std::time::{Duration, Instant};
|
||||
@@ -62,10 +61,7 @@ fn activate(system_info: &mut SystemInfo) {
|
||||
.filter(|p| p.name() == EXE_ENHANCED || p.name() == EXE_LEGACY)
|
||||
.for_each(|p| {
|
||||
if !p.kill() {
|
||||
log::log(
|
||||
log::LogLevel::Error,
|
||||
"failed to force close game, probably due to access denied",
|
||||
);
|
||||
log::error!("failed to force close game, probably due to access denied");
|
||||
}
|
||||
});
|
||||
system_info.refresh();
|
||||
|
||||
+6
-2
@@ -12,12 +12,16 @@ fn init_storage() {
|
||||
|
||||
fn panic_hook(panic_info: &std::panic::PanicHookInfo<'_>) {
|
||||
let backtrace = std::backtrace::Backtrace::capture();
|
||||
let message = format!("{panic_info}\nstack backtrace:\n{backtrace}\n");
|
||||
util::log::log(util::log::LogLevel::Panic, &message);
|
||||
let mut message = format!("{panic_info}");
|
||||
if backtrace.status() == std::backtrace::BacktraceStatus::Captured {
|
||||
message += &format!("\nstack backtrace:\n{backtrace}");
|
||||
}
|
||||
log::error!("{message}");
|
||||
}
|
||||
|
||||
fn main() {
|
||||
init_storage();
|
||||
util::logging::Logger::init(log::LevelFilter::Info);
|
||||
std::panic::set_hook(Box::new(panic_hook));
|
||||
gui::run::run();
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
pub mod consts;
|
||||
pub mod countdown;
|
||||
pub mod log;
|
||||
pub mod logging;
|
||||
pub mod persistent_state;
|
||||
pub mod system_info;
|
||||
pub mod win;
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
use crate::util::consts::path;
|
||||
use std::{fs::File, io::Write};
|
||||
use strum::Display;
|
||||
|
||||
#[derive(Clone, Copy, Display)]
|
||||
pub enum LogLevel {
|
||||
Error,
|
||||
Panic,
|
||||
}
|
||||
|
||||
pub fn log(level: LogLevel, message: &str) {
|
||||
let mut file = File::options()
|
||||
.create(true)
|
||||
.append(true)
|
||||
.open(path::APP_LOG.as_path())
|
||||
.unwrap();
|
||||
let timestamp = chrono::Local::now().to_rfc3339_opts(chrono::SecondsFormat::Secs, false);
|
||||
let message = format!("[{timestamp}] [{level}]\n{message}\n\n");
|
||||
file.write_all(message.as_bytes()).unwrap();
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
use std::{
|
||||
fs::File,
|
||||
io::Write,
|
||||
sync::{LazyLock, Mutex},
|
||||
time::SystemTime,
|
||||
};
|
||||
|
||||
pub struct Logger {
|
||||
file: Mutex<File>,
|
||||
}
|
||||
|
||||
static LOGGER: LazyLock<Logger> = LazyLock::new(|| Logger {
|
||||
file: File::options()
|
||||
.create(true)
|
||||
.append(true)
|
||||
.open(crate::util::consts::path::APP_LOG.as_path())
|
||||
.unwrap()
|
||||
.into(),
|
||||
});
|
||||
|
||||
impl log::Log for Logger {
|
||||
fn enabled(&self, metadata: &log::Metadata) -> bool {
|
||||
metadata.level() <= log::Level::Info
|
||||
}
|
||||
|
||||
fn flush(&self) {}
|
||||
|
||||
fn log(&self, record: &log::Record) {
|
||||
if self.enabled(record.metadata()) {
|
||||
self.log_to_stderr(record);
|
||||
self.log_to_file(record);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Logger {
|
||||
pub fn init(level: log::LevelFilter) {
|
||||
log::set_logger(&*LOGGER)
|
||||
.map(|()| log::set_max_level(level))
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
fn log_to_file(&self, record: &log::Record) {
|
||||
let mut file = self.file.lock().unwrap();
|
||||
write!(
|
||||
file,
|
||||
"[{}][{}]\n{}\n\n",
|
||||
humantime::format_rfc3339_seconds(SystemTime::now()),
|
||||
record.level(),
|
||||
record.args()
|
||||
)
|
||||
.unwrap();
|
||||
file.flush().unwrap();
|
||||
}
|
||||
|
||||
fn log_to_stderr(&self, record: &log::Record) {
|
||||
eprintln!(
|
||||
"[{}][{}]\n{}",
|
||||
humantime::format_rfc3339_seconds(SystemTime::now()),
|
||||
record.level(),
|
||||
record.args()
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user