aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/config/opts.rs1
-rw-r--r--ports/libsimpleservo/capi/src/lib.rs44
-rw-r--r--ports/libsimpleservo/capi/src/vslogger.rs4
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) {