1use log::{LevelFilter, Log, Metadata, Record};
4use sidevm_env::ocall_funcs_guest as ocall;
5
6pub struct Logger {
8 max_level: LevelFilter,
9}
10
11impl Logger {
12 pub fn with_max_level(max_level: LevelFilter) -> Self {
14 Self { max_level }
15 }
16
17 pub fn init(self) {
19 log::set_max_level(self.max_level);
20 log::set_boxed_logger(Box::new(self)).unwrap();
21 }
22}
23
24impl Log for Logger {
25 fn enabled(&self, metadata: &Metadata) -> bool {
26 metadata.level() <= self.max_level
27 }
28
29 fn log(&self, record: &Record) {
30 if self.enabled(record.metadata()) {
31 let message = format!("{}", record.args());
32
33 let _ = ocall::log(record.level(), &message);
34 }
35 }
36
37 fn flush(&self) {}
38}