diff options
-rw-r--r-- | components/config/opts.rs | 1 | ||||
-rw-r--r-- | ports/libsimpleservo/capi/src/lib.rs | 44 | ||||
-rw-r--r-- | ports/libsimpleservo/capi/src/vslogger.rs | 4 |
3 files changed, 31 insertions, 18 deletions
diff --git a/components/config/opts.rs b/components/config/opts.rs index 64856866a86..292d06c67dc 100644 --- a/components/config/opts.rs +++ b/components/config/opts.rs @@ -728,6 +728,7 @@ pub fn from_cmdline_args(mut opts: Options, args: &[String]) -> ArgumentParsingR opts.optopt("", "profiler-db-pass", "Profiler database password", ""); opts.optopt("", "profiler-db-name", "Profiler database name", ""); opts.optflag("", "print-pwm", "Print Progressive Web Metrics"); + opts.optopt("", "vslogger-level", "Visual Studio logger level", "Warn"); let opt_match = match opts.parse(args) { Ok(m) => m, diff --git a/ports/libsimpleservo/capi/src/lib.rs b/ports/libsimpleservo/capi/src/lib.rs index a7e5b039bc8..c0affcf52d0 100644 --- a/ports/libsimpleservo/capi/src/lib.rs +++ b/ports/libsimpleservo/capi/src/lib.rs @@ -14,6 +14,7 @@ mod vslogger; use backtrace::Backtrace; #[cfg(not(target_os = "windows"))] use env_logger; +use log::LevelFilter; use simpleservo::{self, gl_glue, ServoGlue, SERVO}; use simpleservo::{Coordinates, EventLoopWaker, HostTrait, InitOptions, VRInitOptions}; use std::ffi::{CStr, CString}; @@ -22,6 +23,7 @@ use std::mem; use std::os::raw::{c_char, c_void}; use std::panic::{self, UnwindSafe}; use std::slice; +use std::str::FromStr; use std::sync::RwLock; extern "C" fn default_panic_handler(msg: *const c_char) { @@ -234,9 +236,8 @@ pub extern "C" fn servo_version() -> *const c_char { } #[cfg(target_os = "windows")] -fn init_logger(modules: &[*const c_char]) { +fn init_logger(modules: &[*const c_char], level: LevelFilter) { use crate::vslogger::LOG_MODULE_FILTERS; - use log::LevelFilter; use std::sync::Once; use vslogger::VSLogger; @@ -252,13 +253,13 @@ fn init_logger(modules: &[*const c_char]) { LOGGER_INIT.call_once(|| { log::set_logger(&LOGGER) - .map(|_| log::set_max_level(LevelFilter::Debug)) + .map(|_| log::set_max_level(level)) .unwrap(); }); } #[cfg(not(target_os = "windows"))] -fn init_logger(_modules: &[*const c_char]) { +fn init_logger(_modules: &[*const c_char], _level: LevelFilter) { crate::env_logger::init(); } @@ -270,18 +271,6 @@ unsafe fn init( wakeup: extern "C" fn(), callbacks: CHostCallbacks, ) { - let logger_modules = if opts.vslogger_mod_list.is_null() { - &[] - } else { - slice::from_raw_parts(opts.vslogger_mod_list, opts.vslogger_mod_size as usize) - }; - - init_logger(logger_modules); - - if let Err(reason) = redirect_stdout_stderr() { - warn!("Error redirecting stdout/stderr: {}", reason); - } - let args = if !opts.args.is_null() { let args = CStr::from_ptr(opts.args); args.to_str() @@ -293,6 +282,29 @@ unsafe fn init( vec![] }; + let logger_level = if let Some(level_index) = args.iter().position(|s| s == "--vslogger-level") + { + if args.len() >= level_index + 1 { + LevelFilter::from_str(&args[level_index + 1]).unwrap_or(LevelFilter::Warn) + } else { + LevelFilter::Warn + } + } else { + LevelFilter::Warn + }; + + let logger_modules = if opts.vslogger_mod_list.is_null() { + &[] + } else { + slice::from_raw_parts(opts.vslogger_mod_list, opts.vslogger_mod_size as usize) + }; + + init_logger(logger_modules, logger_level); + + if let Err(reason) = redirect_stdout_stderr() { + warn!("Error redirecting stdout/stderr: {}", reason); + } + let url = CStr::from_ptr(opts.url); let url = url.to_str().map(|s| s.to_string()).ok(); diff --git a/ports/libsimpleservo/capi/src/vslogger.rs b/ports/libsimpleservo/capi/src/vslogger.rs index 77fb550c222..057772226df 100644 --- a/ports/libsimpleservo/capi/src/vslogger.rs +++ b/ports/libsimpleservo/capi/src/vslogger.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -use log::{self, Level, Metadata, Record}; +use log::{self, Metadata, Record}; use std::sync::{Arc, Mutex}; lazy_static! { @@ -20,7 +20,7 @@ impl log::Log for VSLogger { let modules = LOG_MODULE_FILTERS.lock().unwrap(); let is_module_enabled = modules.contains(&String::from(metadata.target())) || modules.is_empty(); - return metadata.level() <= Level::Warn && is_module_enabled; + return is_module_enabled; } fn log(&self, record: &Record) { |