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 };