use alloc::format;
use hyperlight_common::flatbuffer_wrappers::guest_log_level::LogLevel;
use log::{LevelFilter, Metadata, Record};
use crate::GUEST_HANDLE;
struct GuestLogger {}
pub(crate) fn init_logger(filter: LevelFilter) {
log::set_logger(&GuestLogger {}).expect("unable to setup guest logger");
log::set_max_level(filter);
}
impl log::Log for GuestLogger {
fn enabled(&self, _: &Metadata) -> bool {
true
}
fn log(&self, record: &Record) {
let handle = unsafe { GUEST_HANDLE };
if self.enabled(record.metadata()) {
handle.log_message(
record.level().into(),
format!("{}", record.args()).as_str(),
record.module_path().unwrap_or("Unknown"),
record.target(),
record.file().unwrap_or("Unknown"),
record.line().unwrap_or(0),
);
}
}
fn flush(&self) {}
}
pub fn log_message(
level: LogLevel,
message: &str,
module_path: &str,
target: &str,
file: &str,
line: u32,
) {
let handle = unsafe { GUEST_HANDLE };
handle.log_message(level, message, module_path, target, file, line);
}