mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			2.7 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/. */
 | 
						|
 | 
						|
import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
 | 
						|
 | 
						|
import { Log as StdLog } from "resource://gre/modules/Log.sys.mjs";
 | 
						|
 | 
						|
const PREF_REMOTE_LOG_LEVEL = "remote.log.level";
 | 
						|
 | 
						|
// We still check the marionette log preference for backward compatibility.
 | 
						|
// This can be removed when geckodriver 0.30 (bug 1686110) has been released.
 | 
						|
const PREF_MARIONETTE_LOG_LEVEL = "marionette.log.level";
 | 
						|
 | 
						|
const lazy = {};
 | 
						|
 | 
						|
// Lazy getter which will return the preference (remote or marionette) which has
 | 
						|
// the most verbose log level.
 | 
						|
XPCOMUtils.defineLazyGetter(lazy, "prefLogLevel", () => {
 | 
						|
  function getLogLevelNumber(pref) {
 | 
						|
    const level = Services.prefs.getCharPref(pref, "Fatal");
 | 
						|
    return (
 | 
						|
      StdLog.Level.Numbers[level.toUpperCase()] || StdLog.Level.Numbers.FATAL
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  const marionetteNumber = getLogLevelNumber(PREF_MARIONETTE_LOG_LEVEL);
 | 
						|
  const remoteNumber = getLogLevelNumber(PREF_REMOTE_LOG_LEVEL);
 | 
						|
 | 
						|
  if (marionetteNumber < remoteNumber) {
 | 
						|
    return PREF_MARIONETTE_LOG_LEVEL;
 | 
						|
  }
 | 
						|
 | 
						|
  return PREF_REMOTE_LOG_LEVEL;
 | 
						|
});
 | 
						|
 | 
						|
/** E10s compatible wrapper for the standard logger from Log.sys.mjs. */
 | 
						|
export class Log {
 | 
						|
  static TYPES = {
 | 
						|
    CDP: "CDP",
 | 
						|
    MARIONETTE: "Marionette",
 | 
						|
    REMOTE_AGENT: "RemoteAgent",
 | 
						|
    WEBDRIVER_BIDI: "WebDriver BiDi",
 | 
						|
  };
 | 
						|
 | 
						|
  /**
 | 
						|
   * Get a logger instance. For each provided type, a dedicated logger instance
 | 
						|
   * will be returned, but all loggers are relying on the same preference.
 | 
						|
   *
 | 
						|
   * @param {String} type
 | 
						|
   *     The type of logger to use. Protocol-specific modules should use the
 | 
						|
   *     corresponding logger type. Eg. files under /marionette should use
 | 
						|
   *     Log.TYPES.MARIONETTE.
 | 
						|
   */
 | 
						|
  static get(type = Log.TYPES.REMOTE_AGENT) {
 | 
						|
    const logger = StdLog.repository.getLogger(type);
 | 
						|
    if (!logger.ownAppenders.length) {
 | 
						|
      logger.addAppender(new StdLog.DumpAppender());
 | 
						|
      logger.manageLevelFromPref(lazy.prefLogLevel);
 | 
						|
    }
 | 
						|
    return logger;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Check if the current log level matches the Trace log level. This should be
 | 
						|
   * used to guard logger.trace calls and avoid instanciating logger instances
 | 
						|
   * unnecessarily.
 | 
						|
   */
 | 
						|
  static get isTraceLevel() {
 | 
						|
    return [StdLog.Level.All, StdLog.Level.Trace].includes(lazy.prefLogLevel);
 | 
						|
  }
 | 
						|
 | 
						|
  static get verbose() {
 | 
						|
    // we can't use Preferences.sys.mjs before first paint,
 | 
						|
    // see ../browser/base/content/test/performance/browser_startup.js
 | 
						|
    const level = Services.prefs.getStringPref(PREF_REMOTE_LOG_LEVEL, "Info");
 | 
						|
    return StdLog.Level[level] >= StdLog.Level.Info;
 | 
						|
  }
 | 
						|
}
 |