Files
unshell/src/logger/mod.rs
T

83 lines
1.5 KiB
Rust
Raw Normal View History

2025-11-23 22:40:06 -07:00
// Choose if the macros are enabled based on the feature setting
#[cfg(feature = "log")]
2025-11-09 12:34:52 -07:00
pub mod macros;
2025-11-23 22:40:06 -07:00
#[cfg(not(feature = "log"))]
pub mod macros_disabled;
2025-11-09 12:34:52 -07:00
mod pretty_logger;
use std::time::SystemTime;
pub use pretty_logger::PrettyLogger;
static mut LOGGER: &dyn Logger = &DefaultLogger;
2025-12-16 17:12:00 -07:00
#[derive(Debug, serde::Serialize, serde::Deserialize)]
2025-11-09 12:34:52 -07:00
pub enum LogLevel {
Debug,
Info,
Warn,
Error,
}
2025-12-16 17:12:00 -07:00
#[derive(Debug, serde::Serialize, serde::Deserialize)]
2025-11-09 12:34:52 -07:00
pub struct Record {
log_level: LogLevel,
2025-11-11 11:00:28 -07:00
location: Option<String>,
2025-11-09 12:34:52 -07:00
// line: u32,
time: SystemTime,
message: String,
}
pub trait Logger {
fn log(&self, log: Record);
}
struct DefaultLogger;
impl Logger for DefaultLogger {
fn log(&self, _: Record) {}
}
#[allow(unused_variables)]
2025-11-09 12:34:52 -07:00
pub fn set_logger_box(logger: Box<dyn Logger>) {
2025-11-24 08:45:44 -07:00
#[cfg(feature = "log")]
2025-11-09 12:34:52 -07:00
unsafe {
LOGGER = Box::leak(logger);
}
}
pub fn set_logger(logger: &'static dyn Logger) {
unsafe {
LOGGER = logger;
}
}
2025-11-11 11:00:28 -07:00
pub fn add_record(
log_level: LogLevel,
location: Option<String>,
time: SystemTime,
message: String,
) {
2025-11-09 12:34:52 -07:00
logger().log(Record {
log_level,
location,
time,
message,
});
}
2026-01-26 09:13:46 -07:00
pub fn logger() -> &'static dyn Logger {
2025-11-09 12:34:52 -07:00
unsafe { LOGGER }
}
#[allow(dead_code, improper_ctypes_definitions)]
pub type SetupLogger = extern "C" fn(logger: &'static dyn Logger);
#[unsafe(no_mangle)]
#[allow(improper_ctypes_definitions)]
pub extern "C" fn setup_logger(logger: &'static dyn Logger) {
set_logger(logger);
}