logging: implement a way to set the logging levels at runtime
This commit is contained in:
@@ -1,11 +1,13 @@
|
|||||||
|
#![allow(static_mut_refs)]
|
||||||
|
|
||||||
use embassy_sync::blocking_mutex::{raw::CriticalSectionRawMutex, Mutex};
|
use embassy_sync::blocking_mutex::{raw::CriticalSectionRawMutex, Mutex};
|
||||||
use esp_println::println;
|
use esp_println::println;
|
||||||
use log::{LevelFilter, Metadata, Record};
|
use log::{LevelFilter, Metadata, Record};
|
||||||
use static_cell::StaticCell;
|
|
||||||
|
|
||||||
// Provides a threadsafe serial logger
|
// Provides a threadsafe serial logger
|
||||||
pub struct RenderbugLogger {
|
pub struct RenderbugLogger {
|
||||||
lock: Mutex<CriticalSectionRawMutex, ()>,
|
lock: Mutex<CriticalSectionRawMutex, ()>,
|
||||||
|
current_level: LevelFilter,
|
||||||
default_level: LevelFilter
|
default_level: LevelFilter
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13,12 +15,14 @@ impl Default for RenderbugLogger {
|
|||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
lock: Mutex::new(()),
|
lock: Mutex::new(()),
|
||||||
|
current_level: LevelFilter::Info,
|
||||||
default_level: LevelFilter::Info
|
default_level: LevelFilter::Info
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static LOGGER: StaticCell<RenderbugLogger> = StaticCell::new();
|
//static LOGGER: StaticCell<RenderbugLogger> = StaticCell::new();
|
||||||
|
static mut LOGGER: Option<RenderbugLogger> = None;
|
||||||
|
|
||||||
impl RenderbugLogger {
|
impl RenderbugLogger {
|
||||||
pub fn init_logger() {
|
pub fn init_logger() {
|
||||||
@@ -33,7 +37,8 @@ impl RenderbugLogger {
|
|||||||
_ => LevelFilter::Info
|
_ => LevelFilter::Info
|
||||||
};
|
};
|
||||||
|
|
||||||
let logger = LOGGER.init(RenderbugLogger { default_level, ..Default::default() });
|
unsafe { LOGGER.replace(RenderbugLogger { default_level, current_level: default_level, ..Default::default() }) };
|
||||||
|
let logger = unsafe { LOGGER.as_mut().unwrap() };
|
||||||
unsafe {
|
unsafe {
|
||||||
critical_section::with(|_| {
|
critical_section::with(|_| {
|
||||||
log::set_logger_racy(logger).ok();
|
log::set_logger_racy(logger).ok();
|
||||||
@@ -41,6 +46,25 @@ impl RenderbugLogger {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_level(level: LevelFilter) {
|
||||||
|
unsafe {
|
||||||
|
critical_section::with(|_| {
|
||||||
|
log::set_max_level_racy(level);
|
||||||
|
LOGGER.as_mut().unwrap().current_level = level;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn reset_level() {
|
||||||
|
unsafe {
|
||||||
|
critical_section::with(|_| {
|
||||||
|
let logger = LOGGER.as_mut().unwrap();
|
||||||
|
log::set_max_level_racy(logger.default_level);
|
||||||
|
logger.current_level = logger.default_level;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl log::Log for RenderbugLogger {
|
impl log::Log for RenderbugLogger {
|
||||||
|
|||||||
Reference in New Issue
Block a user