gecko-dev/testing/marionette/log.js
Andreas Tolfsen 719b4c5e30 Bug 1482829 - Track Marionette logger verbosity with Log#manageLevelFromPref. r=whimboo
This patch adopts Logger#managerLevelFromPref from Log.jsm to set
and keep track of the Marionette logger's verbosity.

This has the advantage that we do not have to roll separate
implementations of Log for the child- and parent processes.  It also
has the upside that the log level will be reflected when changed
at runtime through the use of an observer.
2018-08-17 12:55:33 +01:00

64 lines
1.9 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const StdLog = ChromeUtils.import("resource://gre/modules/Log.jsm", {}).Log;
this.EXPORTED_SYMBOLS = ["Log"];
const PREF_LOG_LEVEL = "marionette.log.level";
/**
* Shorthand for accessing the Marionette logging repository.
*
* Using this class to retrieve the `Log.jsm` repository for
* Marionette will ensure the logger is set up correctly with the
* appropriate stdout dumper and with the correct log level.
*
* Unlike `Log.jsm` this logger is E10s safe, meaning repository
* configuration is communicated across processes.
*/
class Log {
/**
* Obtain the `Marionette` logger.
*
* The returned {@link Logger} instance is shared among all
* callers in the same process.
*
* @return {Logger}
*/
static get() {
let logger = StdLog.repository.getLogger("Marionette");
if (logger.ownAppenders.length == 0) {
logger.addAppender(new StdLog.DumpAppender());
logger.manageLevelFromPref(PREF_LOG_LEVEL);
}
return logger;
}
/**
* Obtain a logger that logs all messages with a prefix.
*
* Unlike {@link LoggerRepository.getLoggerWithMessagePrefix()}
* this function will ensure invoke {@link #get()} first to ensure
* the logger has been properly set up.
*
* This returns a new object with a prototype chain that chains
* up the original {@link Logger} instance. The new prototype has
* log functions that prefix `prefix` to each message.
*
* @param {string} prefix
* String to prefix each logged message with.
*
* @return {Proxy.<Logger>}
*/
static getWithPrefix(prefix) {
this.get();
return StdLog.repository.getLoggerWithMessagePrefix("Marionette", `[${prefix}] `);
}
}
this.Log = Log;