This repository has been archived on 2026-09-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
OxideJS/crates/oxide_log/src/subsystem.rs
T
2026-06-26 18:43:29 +08:00

58 lines
1.7 KiB
Rust

use crate::level::Level;
#[repr(usize)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SubsystemId {
Vm = 0,
Ic = 1,
Kernel = 2,
Builtins = 3,
}
pub const SUBSYSTEM_COUNT: usize = 4;
pub fn parse_level(s: &str) -> Option<Level> {
if s.eq_ignore_ascii_case("off") {
Some(Level::Off)
} else if s.eq_ignore_ascii_case("error") {
Some(Level::Error)
} else if s.eq_ignore_ascii_case("warn") {
Some(Level::Warn)
} else if s.eq_ignore_ascii_case("info") {
Some(Level::Info)
} else if s.eq_ignore_ascii_case("debug") {
Some(Level::Debug)
} else if s.eq_ignore_ascii_case("trace") {
Some(Level::Trace)
} else {
None
}
}
pub fn apply_env_levels() {
let Ok(spec) = std::env::var("OXIDE_LOG") else {
return;
};
for directive in spec.split(',') {
let Some((target, level_str)) = directive.split_once('=') else {
continue;
};
let Some(level) = parse_level(level_str.trim()) else {
continue;
};
match target.trim() {
"oxide" => {
crate::set_level(SubsystemId::Vm, level);
crate::set_level(SubsystemId::Ic, level);
crate::set_level(SubsystemId::Kernel, level);
crate::set_level(SubsystemId::Builtins, level);
}
"oxide::vm" => crate::set_level(SubsystemId::Vm, level),
"oxide::ic" => crate::set_level(SubsystemId::Ic, level),
"oxide::kernel" => crate::set_level(SubsystemId::Kernel, level),
"oxide::builtins" => crate::set_level(SubsystemId::Builtins, level),
_ => {}
}
}
}