Split driver log level env
This commit is contained in:
@@ -4,7 +4,7 @@ use alloc::borrow::ToOwned;
|
||||
use alloc::vec::Vec;
|
||||
|
||||
use syscall::flag::{O_CLOEXEC, O_RDONLY};
|
||||
use syscall::{EINTR, Error};
|
||||
use syscall::{Error, EINTR};
|
||||
|
||||
use redox_rt::proc::*;
|
||||
|
||||
@@ -62,7 +62,7 @@ pub fn main() -> ! {
|
||||
|
||||
if let Some(log_env) = envs
|
||||
.iter()
|
||||
.find_map(|var| var.strip_prefix(b"BOOT_LOG_LEVEL="))
|
||||
.find_map(|var| var.strip_prefix(b"BOOTSTRAP_LOG_LEVEL="))
|
||||
{
|
||||
if let Ok(Ok(log_level)) = str::from_utf8(&log_env).map(|s| log::LevelFilter::from_str(s)) {
|
||||
log::set_max_level(log_level);
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
use std::str::FromStr;
|
||||
|
||||
use libredox::{flag, Fd};
|
||||
use redox_log::{OutputBuilder, RedoxLogger};
|
||||
|
||||
pub fn output_level() -> log::LevelFilter {
|
||||
//TODO: adjust with bootloader environment
|
||||
log::LevelFilter::Info
|
||||
}
|
||||
|
||||
@@ -15,9 +17,13 @@ pub fn setup_logging(
|
||||
category: &str,
|
||||
subcategory: &str,
|
||||
logfile_base: &str,
|
||||
output_level: log::LevelFilter,
|
||||
mut output_level: log::LevelFilter,
|
||||
file_level: log::LevelFilter,
|
||||
) {
|
||||
if let Some(log_level) = read_bootloader_log_level_env(category, subcategory) {
|
||||
output_level = log_level;
|
||||
}
|
||||
|
||||
let mut logger = RedoxLogger::new().with_output(
|
||||
OutputBuilder::stderr()
|
||||
.with_filter(output_level) // limit global output to important info
|
||||
@@ -57,3 +63,45 @@ pub fn setup_logging(
|
||||
|
||||
logger.enable().expect("failed to set default logger");
|
||||
}
|
||||
|
||||
fn read_bootloader_log_level_env(category: &str, subcategory: &str) -> Option<log::LevelFilter> {
|
||||
let mut env_bytes = [0_u8; 4096];
|
||||
|
||||
// TODO: Have the kernel env can specify prefixed env key instead of having to read all of them
|
||||
let envs = {
|
||||
let Ok(fd) = Fd::open("/scheme/sys/env", flag::O_RDONLY | flag::O_CLOEXEC, 0) else {
|
||||
return None;
|
||||
};
|
||||
let Ok(bytes_read) = fd.read(&mut env_bytes) else {
|
||||
return None;
|
||||
};
|
||||
if bytes_read >= env_bytes.len() {
|
||||
return None;
|
||||
}
|
||||
let env_bytes = &mut env_bytes[..bytes_read];
|
||||
|
||||
env_bytes
|
||||
.split(|&c| c == b'\n')
|
||||
.filter(|var| var.starts_with(b"DRIVER_"))
|
||||
.collect::<Vec<_>>()
|
||||
};
|
||||
|
||||
let log_env_keys = [
|
||||
format!("DRIVER_{}_LOG_LEVEL=", subcategory.to_ascii_uppercase()),
|
||||
format!("DRIVER_{}_LOG_LEVEL=", category.to_ascii_uppercase()),
|
||||
"DRIVER_LOG_LEVEL=".to_string(),
|
||||
];
|
||||
|
||||
for log_env_key in log_env_keys {
|
||||
let log_env_key = log_env_key.as_bytes();
|
||||
if let Some(log_env) = envs.iter().find_map(|var| var.strip_prefix(log_env_key)) {
|
||||
if let Ok(Ok(log_level)) =
|
||||
str::from_utf8(&log_env).map(|s| log::LevelFilter::from_str(s))
|
||||
{
|
||||
return Some(log_level);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
@@ -24,7 +24,8 @@ fn daemon(daemon: daemon::Daemon, mut pcid_handle: PciFunctionHandle) -> ! {
|
||||
"graphics",
|
||||
"pci",
|
||||
&name,
|
||||
log::LevelFilter::Debug, //common::output_level(),
|
||||
// TODO: common::output_level() once stable
|
||||
log::LevelFilter::Debug,
|
||||
common::file_level(),
|
||||
);
|
||||
|
||||
|
||||
@@ -236,15 +236,13 @@ fn main() {
|
||||
}
|
||||
|
||||
fn daemon(daemon: daemon::Daemon) -> ! {
|
||||
let mut args = pico_args::Arguments::from_env();
|
||||
let verbosity = (0..).find(|_| !args.contains("-v")).unwrap_or(0);
|
||||
let log_level = match verbosity {
|
||||
0 => log::LevelFilter::Info,
|
||||
1 => log::LevelFilter::Debug,
|
||||
_ => log::LevelFilter::Trace,
|
||||
};
|
||||
|
||||
common::setup_logging("bus", "pci", "pcid", log_level, log::LevelFilter::Info);
|
||||
common::setup_logging(
|
||||
"bus",
|
||||
"pci",
|
||||
"pcid",
|
||||
common::output_level(),
|
||||
common::file_level(),
|
||||
);
|
||||
|
||||
let pcie = Pcie::new();
|
||||
let mut tree = BTreeMap::new();
|
||||
|
||||
@@ -34,7 +34,7 @@ fn main() {
|
||||
"usb",
|
||||
"device",
|
||||
&name,
|
||||
log::LevelFilter::Warn,
|
||||
common::output_level(),
|
||||
common::file_level(),
|
||||
);
|
||||
|
||||
|
||||
@@ -129,7 +129,7 @@ fn daemon_with_context_size<const N: usize>(
|
||||
"usb",
|
||||
"host",
|
||||
&name,
|
||||
log::LevelFilter::Warn,
|
||||
common::output_level(),
|
||||
common::file_level(),
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user