Bug 1444431 - Filter logs from familiar logging targets. r?whimboo
geckodriver uses log 0.4, but it depends on a version of hyper that
uses log 0.3.
Previously this meant that geckodriver's logger could only see
messages from crates using log 0.4, and had no access to messages
from hyper or other crates using log 0.3. However, log 0.3.9 added
interoperability so that programs built with a mix of log 0.3 and
log 0.4 can again display messages from all crates.
This patches geckodriver::logging to contain a whitelist of logged
targets we care about. Currently this list includes geckodriver,
mozprofile, mozrunner, mozversion, and webdriver. This will revert
us to the behaviour prior to upgrading hyper to use log 0.3.9,
and would be similar to the old implementation we had for filtering
logs we had when geckodriver used slog.
Thanks-to: Matt Brubeck <mbrubeck@mozilla.com>
MozReview-Commit-ID: 6Xj0k6VD1dQ
--- a/testing/geckodriver/src/logging.rs
+++ b/testing/geckodriver/src/logging.rs
@@ -28,25 +28,30 @@
//! [`init_with_level`]: fn.init_with_level.html
use chrono;
use log;
use std::fmt;
use std::io;
use std::io::Write;
use std::str;
-use std::sync::atomic::{ATOMIC_USIZE_INIT, AtomicUsize, Ordering};
+use std::sync::atomic::{AtomicUsize, Ordering, ATOMIC_USIZE_INIT};
static MAX_LOG_LEVEL: AtomicUsize = ATOMIC_USIZE_INIT;
+const LOGGED_TARGETS: &'static [&'static str] = &[
+ "geckodriver",
+ "mozprofile",
+ "mozrunner",
+ "mozversion",
+ "webdriver",
+];
/// Logger levels from [Log.jsm].
///
-/// [Log.jsm]:
-/// https://developer.mozilla.org/en/docs/Mozilla/JavaScript_code_modules/Log.
-/// jsm
+/// [Log.jsm]: https://developer.mozilla.org/en/docs/Mozilla/JavaScript_code_modules/Log.jsm
#[repr(usize)]
#[derive(Clone, Copy, Eq, Debug, Hash, PartialEq)]
pub enum Level {
Fatal = 70,
Error = 60,
Warn = 50,
Info = 40,
Config = 30,
@@ -129,17 +134,18 @@ impl From<log::Level> for Level {
}
}
}
struct Logger;
impl log::Log for Logger {
fn enabled(&self, meta: &log::Metadata) -> bool {
- meta.level() <= log::max_level()
+ LOGGED_TARGETS.iter().any(|&x| meta.target().starts_with(x))
+ && meta.level() <= log::max_level()
}
fn log(&self, record: &log::Record) {
if self.enabled(record.metadata()) {
let ts = format_ts(chrono::Local::now());
println!(
"{}\t{}\t{}\t{}",
ts,