Bug 1444431 - Filter logs from familiar logging targets. r=jgraham

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

--HG--
extra : rebase_source : 7a5aee1642b94516eedc1ca25b722e2868d0983b
This commit is contained in:
Andreas Tolfsen 2018-03-11 15:51:00 +00:00
parent 34114150a6
commit af806c4bab

View File

@ -33,15 +33,20 @@ 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 {
@ -134,7 +139,8 @@ 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) {