7935ed0248
This will make it easier to change the way logging is done for all drivers. This also fixes the log category for a couple of drivers as well as makes failing to set the logger a fatal error. Only when a logger is already set is it impossible to set another logger.
50 lines
1.5 KiB
Rust
50 lines
1.5 KiB
Rust
use redox_log::{OutputBuilder, RedoxLogger};
|
|
|
|
#[cfg_attr(not(target_os = "redox"), allow(unused_variables, unused_mut))]
|
|
pub fn setup_logging(
|
|
category: &str,
|
|
subcategory: &str,
|
|
logfile_base: &str,
|
|
output_level: log::LevelFilter,
|
|
file_level: log::LevelFilter,
|
|
) {
|
|
let mut logger = RedoxLogger::new().with_output(
|
|
OutputBuilder::stderr()
|
|
.with_filter(output_level) // limit global output to important info
|
|
.with_ansi_escape_codes()
|
|
.flush_on_newline(true)
|
|
.build(),
|
|
);
|
|
|
|
#[cfg(target_os = "redox")]
|
|
match OutputBuilder::in_redox_logging_scheme(
|
|
category,
|
|
subcategory,
|
|
format!("{logfile_base}.log"),
|
|
) {
|
|
Ok(b) => {
|
|
logger = logger.with_output(b.with_filter(file_level).flush_on_newline(true).build())
|
|
}
|
|
Err(error) => eprintln!("Failed to create {logfile_base}.log: {}", error),
|
|
}
|
|
|
|
#[cfg(target_os = "redox")]
|
|
match OutputBuilder::in_redox_logging_scheme(
|
|
category,
|
|
subcategory,
|
|
format!("{logfile_base}.ansi.log"),
|
|
) {
|
|
Ok(b) => {
|
|
logger = logger.with_output(
|
|
b.with_filter(file_level)
|
|
.with_ansi_escape_codes()
|
|
.flush_on_newline(true)
|
|
.build(),
|
|
)
|
|
}
|
|
Err(error) => eprintln!("Failed to create {logfile_base}.ansi.log: {}", error),
|
|
}
|
|
|
|
logger.enable().expect("failed to set default logger");
|
|
}
|