providers/core/core.console.js
/*globals process, console */
/*jslint indent:2,sloppy:true, node:true */
var util = require('../../src/util');
/**
* A freedom.js logging provider that logs to chrome, firefox, and node consoles.
* @Class Logger_console
* @constructor
* @private
* @param {config: Object} cap Capabilities - console requires global config.
*/
var Logger_console = function (cap) {
this.level = (cap.config && cap.config.debug) || 'log';
this.console = (cap.config && cap.config.global.console);
util.handleEvents(this);
};
/**
* Logging levels, for filtering output.
* @private
* @static
*/
Logger_console.level = {
"debug": 0,
"info": 1,
"log": 2,
"warn": 3,
"error": 4
};
/**
* Print a message with appropriate formatting.
* @method print
*/
Logger_console.prototype.print = function (severity, source, msg) {
var arr = msg;
if (typeof this.console === 'undefined' ||
this.console.freedom === true) {
return;
}
if (typeof arr === 'string') {
arr = [arr];
}
if (Logger_console.level[this.level] !== undefined &&
Logger_console.level[severity] < Logger_console.level[this.level]) {
return;
}
if (source) {
if (typeof process !== 'undefined' &&
{}.toString.call(process) === '[object process]') {
// Node.
arr.unshift('\x1B[39m');
arr.unshift('\x1B[31m' + source);
} else if (this.console.maxLogLevel) {
// Firefox in JSM context:
// http://mxr.mozilla.org/mozilla-release/source/toolkit/devtools/Console.jsm
if (!this.console.freedomDump) {
this.console.freedomDump = this.console.dump;
this.console.dump = function() {};
}
this.console.freedomDump(source + ' ' + severity[0].toUpperCase() + ' ' +
arr.join(' ') + '\n');
} else {
arr.unshift('color: none');
arr.unshift('color: red');
arr.unshift('%c' + source + '%c');
}
}
if (!this.console[severity] && this.console.log) {
severity = 'log';
}
this.console[severity].apply(this.console, arr);
};
/**
* Log a message to the console.
* @param {String} source The source of the message.
* @param {String} msg The message to log.
* @method log
*/
Logger_console.prototype.log = function (source, msg, continuation) {
this.print('log', source, msg);
continuation();
};
/**
* Log a message to the console with debug priority.
* @param {String} source The source of the message.
* @param {String} msg The message to log.
* @method log
*/
Logger_console.prototype.debug = function (source, msg, continuation) {
this.print('debug', source, msg);
continuation();
};
/**
* Log a message to the console with info priority.
* @param {String} source The source of the message.
* @param {String} msg The message to log.
* @method log
*/
Logger_console.prototype.info = function (source, msg, continuation) {
this.print('info', source, msg);
continuation();
};
/**
* Log a message to the console with warn priority.
* @param {String} source The source of the message.
* @param {String} msg The message to log.
* @method log
*/
Logger_console.prototype.warn = function (source, msg, continuation) {
this.print('warn', source, msg);
continuation();
};
/**
* Log a message to the console with error priority.
* @param {String} source The source of the message.
* @param {String} msg The message to log.
* @method log
*/
Logger_console.prototype.error = function (source, msg, continuation) {
this.print('error', source, msg);
continuation();
};
/** REGISTER PROVIDER **/
exports.provider = Logger_console;
exports.name = 'core.console';
exports.flags = {config: true};