testing/mochitest/tests/SimpleTest/LogController.js

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     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/. */
     5 var LogController = {}; //create the logger object
     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 };
    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 };
    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 };
    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 };
    50 /* logs message with given level. Currently used locally by log() and error() */
    51 LogController.logWithLevel = function(level, message/*, ...*/) {
    52     var msg = LogController.createLogMessage(
    53         level,
    54         LogController.extend(arguments, 1)
    55     );
    56     LogController.dispatchListeners(msg);
    57     LogController.counter += 1;
    58 };
    60 /* log with level INFO */
    61 LogController.log = function(message/*, ...*/) {
    62     LogController.logWithLevel('INFO', message);
    63 };
    65 /* log with level ERROR */
    66 LogController.error = function(message/*, ...*/) {
    67     LogController.logWithLevel('ERROR', message);
    68 };
    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 };
    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 };
    93 /* remove a listener from this log */
    94 LogController.removeListener = function(ident) {
    95     delete LogController.listeners[ident];
    96 };

mercurial