copay/js/util/log.js

151 lines
3.4 KiB
JavaScript
Raw Normal View History

2014-12-02 06:17:03 -08:00
var config = config || require('../../config');
2014-10-25 15:57:12 -07:00
var _ = require('lodash');
2014-12-02 06:55:29 -08:00
var ls;
2014-12-02 06:26:02 -08:00
2014-12-02 06:55:29 -08:00
try {
2014-12-03 11:30:43 -08:00
var LS = require('../js/plugins/LocalStorage');
2014-12-02 06:55:29 -08:00
ls = new LS();
2014-12-01 06:19:18 -08:00
} catch (e) {};
/**
* @desc
* A simple logger that wraps the <tt>console.log</tt> methods when available.
*
* Usage:
* <pre>
* log = new Logger('copay');
* log.setLevel('info');
* log.debug('Message!'); // won't show
* log.setLevel('debug');
* log.debug('Message!', 1); // will show '[debug] copay: Message!, 1'
* </pre>
*
* @param {string} name - a name for the logger. This will show up on every log call
* @constructor
*/
2014-09-01 08:04:10 -07:00
var Logger = function(name) {
this.name = name || 'log';
this.level = 2;
};
Logger.prototype.getLevels = function() {
return levels;
};
2014-09-01 08:04:10 -07:00
var levels = {
'debug': 0,
'info': 1,
'log': 2,
'warn': 3,
'error': 4,
'fatal': 5
};
_.each(levels, function(level, levelName) {
Logger.prototype[levelName] = function() {
if (level >= levels[this.level]) {
if (Error.stackTraceLimit && this.level == 'debug') {
2014-10-07 04:47:52 -07:00
var old = Error.stackTraceLimit;
2014-12-30 05:37:04 -08:00
Error.stackTraceLimit = 2;
2014-12-30 04:41:52 -08:00
var stack;
// this hack is to be compatible with IE11
try {
anerror();
} catch (e) {
stack = e.stack;
}
var lines = stack.split('\n');
var caller = lines[2];
2014-10-07 04:47:52 -07:00
caller = ':' + caller.substr(6);
Error.stackTraceLimit = old;
}
2014-10-07 04:47:52 -07:00
var str = '[' + levelName + (caller || '') + '] ' + arguments[0],
extraArgs,
extraArgs = [].slice.call(arguments, 1);
if (console[levelName]) {
extraArgs.unshift(str);
console[levelName].apply(console, extraArgs);
} else {
if (extraArgs.length) {
str += JSON.stringify(extraArgs);
2014-09-01 08:04:10 -07:00
}
console.log(str);
2014-09-01 08:04:10 -07:00
}
}
};
});
2014-09-01 08:04:10 -07:00
/**
* @desc
* Sets the level of a logger. A level can be any bewteen: 'debug', 'info', 'log',
* 'warn', 'error', and 'fatal'. That order matters: if a logger's level is set to
* 'warn', calling <tt>level.debug</tt> won't have any effect.
*
* @param {number} level - the name of the logging level
*/
2014-09-01 08:04:10 -07:00
Logger.prototype.setLevel = function(level) {
this.level = level;
};
/**
* @class Logger
* @method debug
* @desc Log messages at the debug level.
* @param {*} args - the arguments to be logged.
*/
/**
* @class Logger
* @method info
* @desc Log messages at the info level.
* @param {*} args - the arguments to be logged.
*/
/**
* @class Logger
* @method log
* @desc Log messages at an intermediary level called 'log'.
* @param {*} args - the arguments to be logged.
*/
/**
* @class Logger
* @method warn
* @desc Log messages at the warn level.
* @param {*} args - the arguments to be logged.
*/
/**
* @class Logger
* @method error
* @desc Log messages at the error level.
* @param {*} args - the arguments to be logged.
*/
/**
* @class Logger
* @method fatal
* @desc Log messages at the fatal level.
* @param {*} args - the arguments to be logged.
*/
2014-09-01 08:04:10 -07:00
var logger = new Logger('copay');
var error = new Error();
2014-12-02 06:55:29 -08:00
var logLevel = config.logLevel || 'info';
2014-12-01 06:19:18 -08:00
2014-12-03 07:13:06 -08:00
2014-12-02 06:55:29 -08:00
if (ls && ls.getItem) {
2014-12-02 06:26:02 -08:00
ls.getItem("config", function(err, value) {
if (err) return;
var localConfig = JSON.parse(value);
if (localConfig && localConfig.logLevel)
logLevel = localConfig.logLevel;
logger.setLevel(logLevel);
});
} else {
logger.setLevel(logLevel);
}
2014-09-01 08:35:40 -07:00
module.exports = logger;