tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

LogController.js (2738B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 var LogController = {}; //create the logger object
      6 
      7 LogController.counter = 0; //current log message number
      8 LogController.listeners = [];
      9 LogController.logLevel = {
     10  FATAL: 50,
     11  ERROR: 40,
     12  WARNING: 30,
     13  INFO: 20,
     14  DEBUG: 10,
     15 };
     16 
     17 /* set minimum logging level */
     18 LogController.logLevelAtLeast = function (minLevel) {
     19  if (typeof minLevel == "string") {
     20    minLevel = LogController.logLevel[minLevel];
     21  }
     22  return function (msg) {
     23    var msgLevel = msg.level;
     24    if (typeof msgLevel == "string") {
     25      msgLevel = LogController.logLevel[msgLevel];
     26    }
     27    return msgLevel >= minLevel;
     28  };
     29 };
     30 
     31 /* creates the log message with the given level and info */
     32 LogController.createLogMessage = function (level, info) {
     33  var msg = {};
     34  msg.num = LogController.counter;
     35  msg.level = level;
     36  msg.info = info;
     37  msg.timestamp = new Date();
     38  return msg;
     39 };
     40 
     41 /* helper method to return a sub-array */
     42 LogController.extend = function (args, skip) {
     43  var ret = [];
     44  for (var i = skip; i < args.length; i++) {
     45    ret.push(args[i]);
     46  }
     47  return ret;
     48 };
     49 
     50 /* logs message with given level. Currently used locally by log() and error() */
     51 LogController.logWithLevel = function (level /*, ...*/) {
     52  var msg = LogController.createLogMessage(
     53    level,
     54    LogController.extend(arguments, 1)
     55  );
     56  LogController.dispatchListeners(msg);
     57  LogController.counter += 1;
     58 };
     59 
     60 /* log with level INFO */
     61 LogController.log = function (message /*, ...*/) {
     62  LogController.logWithLevel("INFO", message);
     63 };
     64 
     65 /* log with level ERROR */
     66 LogController.error = function (message /*, ...*/) {
     67  LogController.logWithLevel("ERROR", message);
     68 };
     69 
     70 /* send log message to listeners */
     71 LogController.dispatchListeners = function (msg) {
     72  for (var k in LogController.listeners) {
     73    var pair = LogController.listeners[k];
     74    if (pair.ident != k || (pair[0] && !pair[0](msg))) {
     75      continue;
     76    }
     77    pair[1](msg);
     78  }
     79 };
     80 
     81 /* add a listener to this log given an identifier, a filter (can be null) and the listener object */
     82 LogController.addListener = function (ident, filter, listener) {
     83  if (typeof filter == "string") {
     84    filter = LogController.logLevelAtLeast(filter);
     85  } else if (filter !== null && typeof filter !== "function") {
     86    throw new Error("Filter must be a string, a function, or null");
     87  }
     88  var entry = [filter, listener];
     89  entry.ident = ident;
     90  LogController.listeners[ident] = entry;
     91 };
     92 
     93 /* remove a listener from this log */
     94 LogController.removeListener = function (ident) {
     95  delete LogController.listeners[ident];
     96 };