/// <reference path='../../../third_party/typings/es6-promise/es6-promise.d.ts' />
/// <reference path='../../../third_party/freedom-typings/freedom-module-env.d.ts' />
/// <reference path='../../../third_party/typings/circular-json/circular-json.d.ts' />
var loggingProviderTypes = require('../loggingprovider/loggingprovider.types');
var CircularJSON = require('circular-json');
// Perform log message formatting. Formats an array of arguments to a
// single string.
// TODO: move this into the provider.
function formatStringMessageWithArgs_(args) {
var msg = '';
for (var i = 0; i < args.length; i++) {
var arg = args[i];
if ('string' !== typeof (arg) && !(arg instanceof String)) {
try {
arg = CircularJSON.stringify(arg);
}
catch (e) {
if (arg && typeof (arg.toString) === 'function') {
arg = arg.toString();
}
else {
arg = e.message;
}
}
}
if (-1 !== msg.indexOf('%' + i)) {
msg = msg.replace('%' + i, arg);
}
else {
Iif (msg.length > 0) {
msg += ' ';
}
msg += arg;
}
}
return msg;
}
var Log = (function () {
function Log(tag_) {
var _this = this;
this.tag_ = tag_;
// the minimum level at which we will issue IPCs for logging statements
this.minLevel = 0 /* debug */;
this.setMinLevel_ = function (level) {
_this.minLevel = level;
};
this.shouldLog_ = function (level) {
return level >= _this.minLevel;
};
this.log_ = function (level, arg, args) {
Iif (!_this.shouldLog_(level)) {
return;
}
// arg exists to make sure at least one argument is given, we want to treat
// all the arguments as a single array however
args.unshift(arg);
Iif (2 === args.length && ('string' === typeof (args[0]) || args[0] instanceof String) && Array.isArray(args[1])) {
args = [args[0]].concat(args[1].slice());
}
var message = formatStringMessageWithArgs_(args);
_this.logger.then(function (logger) {
switch (level) {
case 0 /* debug */:
return logger.debug(message);
case 1 /* info */:
return logger.info(message);
case 2 /* warn */:
return logger.warn(message);
case 3 /* error */:
return logger.error(message);
}
});
};
// Logs message in debug level.
this.debug = function (arg) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
_this.log_(0 /* debug */, arg, args);
};
// Logs message in info level.
this.info = function (arg) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
_this.log_(1 /* info */, arg, args);
};
// Logs message in warn level.
this.warn = function (arg) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
_this.log_(2 /* warn */, arg, args);
};
// Logs message in error level.
this.error = function (arg) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
_this.log_(3 /* error */, arg, args);
};
this.logger = freedom.core().getLogger(this.tag_);
Iif (freedom['logginglistener']) {
freedom['logginglistener'](this.tag_).on('levelchange', this.setMinLevel_);
}
else {
this.warn('Freedom module logginglistener is not available, IPCs will ' + 'be issued for all logging statements');
}
}
return Log;
})();
exports.Log = Log;
|