mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-30 13:45:27 +00:00
97 lines
2.8 KiB
JavaScript
97 lines
2.8 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/. */
|
|
|
|
var LogController = {}; //create the logger object
|
|
|
|
LogController.counter = 0; //current log message number
|
|
LogController.listeners = [];
|
|
LogController.logLevel = {
|
|
FATAL: 50,
|
|
ERROR: 40,
|
|
WARNING: 30,
|
|
INFO: 20,
|
|
DEBUG: 10
|
|
};
|
|
|
|
/* set minimum logging level */
|
|
LogController.logLevelAtLeast = function(minLevel) {
|
|
if (typeof(minLevel) == 'string') {
|
|
minLevel = LogController.logLevel[minLevel];
|
|
}
|
|
return function (msg) {
|
|
var msgLevel = msg.level;
|
|
if (typeof(msgLevel) == 'string') {
|
|
msgLevel = LogController.logLevel[msgLevel];
|
|
}
|
|
return msgLevel >= minLevel;
|
|
};
|
|
};
|
|
|
|
/* creates the log message with the given level and info */
|
|
LogController.createLogMessage = function(level, info) {
|
|
var msg = {};
|
|
msg.num = LogController.counter;
|
|
msg.level = level;
|
|
msg.info = info;
|
|
msg.timestamp = new Date();
|
|
return msg;
|
|
};
|
|
|
|
/* helper method to return a sub-array */
|
|
LogController.extend = function (args, skip) {
|
|
var ret = [];
|
|
for (var i = skip; i<args.length; i++) {
|
|
ret.push(args[i]);
|
|
}
|
|
return ret;
|
|
};
|
|
|
|
/* logs message with given level. Currently used locally by log() and error() */
|
|
LogController.logWithLevel = function(level, message/*, ...*/) {
|
|
var msg = LogController.createLogMessage(
|
|
level,
|
|
LogController.extend(arguments, 1)
|
|
);
|
|
LogController.dispatchListeners(msg);
|
|
LogController.counter += 1;
|
|
};
|
|
|
|
/* log with level INFO */
|
|
LogController.log = function(message/*, ...*/) {
|
|
LogController.logWithLevel('INFO', message);
|
|
};
|
|
|
|
/* log with level ERROR */
|
|
LogController.error = function(message/*, ...*/) {
|
|
LogController.logWithLevel('ERROR', message);
|
|
};
|
|
|
|
/* send log message to listeners */
|
|
LogController.dispatchListeners = function(msg) {
|
|
for (var k in LogController.listeners) {
|
|
var pair = LogController.listeners[k];
|
|
if (pair.ident != k || (pair[0] && !pair[0](msg))) {
|
|
continue;
|
|
}
|
|
pair[1](msg);
|
|
}
|
|
};
|
|
|
|
/* add a listener to this log given an identifier, a filter (can be null) and the listener object */
|
|
LogController.addListener = function(ident, filter, listener) {
|
|
if (typeof(filter) == 'string') {
|
|
filter = LogController.logLevelAtLeast(filter);
|
|
} else if (filter !== null && typeof(filter) !== 'function') {
|
|
throw new Error("Filter must be a string, a function, or null");
|
|
}
|
|
var entry = [filter, listener];
|
|
entry.ident = ident;
|
|
LogController.listeners[ident] = entry;
|
|
};
|
|
|
|
/* remove a listener from this log */
|
|
LogController.removeListener = function(ident) {
|
|
delete LogController.listeners[ident];
|
|
};
|