mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Allow setting Visual Studio logger level from cli arg
This commit is contained in:
parent
0c20fba2ab
commit
e1b6719384
3 changed files with 31 additions and 18 deletions
|
@ -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-pass", "Profiler database password", "");
|
||||||
opts.optopt("", "profiler-db-name", "Profiler database name", "");
|
opts.optopt("", "profiler-db-name", "Profiler database name", "");
|
||||||
opts.optflag("", "print-pwm", "Print Progressive Web Metrics");
|
opts.optflag("", "print-pwm", "Print Progressive Web Metrics");
|
||||||
|
opts.optopt("", "vslogger-level", "Visual Studio logger level", "Warn");
|
||||||
|
|
||||||
let opt_match = match opts.parse(args) {
|
let opt_match = match opts.parse(args) {
|
||||||
Ok(m) => m,
|
Ok(m) => m,
|
||||||
|
|
|
@ -14,6 +14,7 @@ mod vslogger;
|
||||||
use backtrace::Backtrace;
|
use backtrace::Backtrace;
|
||||||
#[cfg(not(target_os = "windows"))]
|
#[cfg(not(target_os = "windows"))]
|
||||||
use env_logger;
|
use env_logger;
|
||||||
|
use log::LevelFilter;
|
||||||
use simpleservo::{self, gl_glue, ServoGlue, SERVO};
|
use simpleservo::{self, gl_glue, ServoGlue, SERVO};
|
||||||
use simpleservo::{Coordinates, EventLoopWaker, HostTrait, InitOptions, VRInitOptions};
|
use simpleservo::{Coordinates, EventLoopWaker, HostTrait, InitOptions, VRInitOptions};
|
||||||
use std::ffi::{CStr, CString};
|
use std::ffi::{CStr, CString};
|
||||||
|
@ -22,6 +23,7 @@ use std::mem;
|
||||||
use std::os::raw::{c_char, c_void};
|
use std::os::raw::{c_char, c_void};
|
||||||
use std::panic::{self, UnwindSafe};
|
use std::panic::{self, UnwindSafe};
|
||||||
use std::slice;
|
use std::slice;
|
||||||
|
use std::str::FromStr;
|
||||||
use std::sync::RwLock;
|
use std::sync::RwLock;
|
||||||
|
|
||||||
extern "C" fn default_panic_handler(msg: *const c_char) {
|
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")]
|
#[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 crate::vslogger::LOG_MODULE_FILTERS;
|
||||||
use log::LevelFilter;
|
|
||||||
use std::sync::Once;
|
use std::sync::Once;
|
||||||
use vslogger::VSLogger;
|
use vslogger::VSLogger;
|
||||||
|
|
||||||
|
@ -252,13 +253,13 @@ fn init_logger(modules: &[*const c_char]) {
|
||||||
|
|
||||||
LOGGER_INIT.call_once(|| {
|
LOGGER_INIT.call_once(|| {
|
||||||
log::set_logger(&LOGGER)
|
log::set_logger(&LOGGER)
|
||||||
.map(|_| log::set_max_level(LevelFilter::Debug))
|
.map(|_| log::set_max_level(level))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(target_os = "windows"))]
|
#[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();
|
crate::env_logger::init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,18 +271,6 @@ unsafe fn init(
|
||||||
wakeup: extern "C" fn(),
|
wakeup: extern "C" fn(),
|
||||||
callbacks: CHostCallbacks,
|
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 = if !opts.args.is_null() {
|
||||||
let args = CStr::from_ptr(opts.args);
|
let args = CStr::from_ptr(opts.args);
|
||||||
args.to_str()
|
args.to_str()
|
||||||
|
@ -293,6 +282,29 @@ unsafe fn init(
|
||||||
vec![]
|
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 = CStr::from_ptr(opts.url);
|
||||||
let url = url.to_str().map(|s| s.to_string()).ok();
|
let url = url.to_str().map(|s| s.to_string()).ok();
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
* 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/. */
|
* 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};
|
use std::sync::{Arc, Mutex};
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
|
@ -20,7 +20,7 @@ impl log::Log for VSLogger {
|
||||||
let modules = LOG_MODULE_FILTERS.lock().unwrap();
|
let modules = LOG_MODULE_FILTERS.lock().unwrap();
|
||||||
let is_module_enabled =
|
let is_module_enabled =
|
||||||
modules.contains(&String::from(metadata.target())) || modules.is_empty();
|
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) {
|
fn log(&self, record: &Record) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue