Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
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 };