testing/mochitest/tests/SimpleTest/LogController.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

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

mercurial