@log4js2/core
Version:
log4js2 is a fast and lightweight logging library that enables logging flexibility within JavaScript/TypeScript applications, similar to Apache's [Log4j2 library](https://logging.apache.org/log4j/2.x/). It can also serve as a drop-in replacement for log4
159 lines (158 loc) • 5.29 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var __1 = require("..");
var marker_1 = require("../marker");
var Logger = /** @class */ (function () {
function Logger(context, _appenders) {
this._appenders = _appenders;
this._logContext = context;
this._logSequence = 0;
this._relative = (new Date()).getTime();
}
Logger.prototype.log = function (level, marker) {
var _this = this;
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
var passed = arguments;
this._appenders.forEach(function (appender) {
return appender.append(_this._constructLogEvent(level, passed, 1));
});
};
Logger.prototype.fatal = function (marker) {
var _this = this;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var passed = arguments;
this._appenders.forEach(function (appender) {
return appender.append(_this._constructLogEvent(__1.LogLevel.FATAL, passed));
});
};
Logger.prototype.error = function (marker) {
var _this = this;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var passed = arguments;
this._appenders.forEach(function (appender) {
return appender.append(_this._constructLogEvent(__1.LogLevel.ERROR, passed));
});
};
Logger.prototype.warn = function (marker) {
var _this = this;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var passed = arguments;
this._appenders.forEach(function (appender) {
return appender.append(_this._constructLogEvent(__1.LogLevel.WARN, passed));
});
};
Logger.prototype.info = function (marker) {
var _this = this;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var passed = arguments;
this._appenders.forEach(function (appender) {
return appender.append(_this._constructLogEvent(__1.LogLevel.INFO, passed));
});
};
Logger.prototype.debug = function (marker) {
var _this = this;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var passed = arguments;
this._appenders.forEach(function (appender) {
return appender.append(_this._constructLogEvent(__1.LogLevel.DEBUG, passed));
});
};
Logger.prototype.trace = function (marker) {
var _this = this;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var passed = arguments;
this._appenders.forEach(function (appender) {
return appender.append(_this._constructLogEvent(__1.LogLevel.TRACE, passed));
});
};
/**
* @function
*
* @param {number} level
* @param {Array.<Object>} args
* @param {number} offset
*
* @return {ILogEvent}
*/
Logger.prototype._constructLogEvent = function (level, args, offset) {
if (offset === void 0) { offset = 0; }
var logTime = new Date();
var error = null;
// this looks horrible, but this is the only way to catch the stack for IE to later parse the stack
try {
throw new Error();
}
catch (e) {
error = e;
}
var logEvent = {
date: logTime,
error: null,
logErrorStack: error,
file: null,
level: level,
lineNumber: null,
logger: this._logContext,
message: '',
method: this._isNotStrict() ? args.callee.caller : 0,
properties: undefined,
relative: logTime.getTime() - this._relative,
sequence: this._logSequence++,
};
var regex = /\{\}/g;
for (var i = offset; i < args.length; i++) {
if (i === offset || (i === offset + 1 && logEvent.marker)) {
if (args[i] instanceof marker_1.Marker) {
logEvent.marker = args[i];
}
else {
logEvent.message = args[i];
}
}
else if (regex.exec(logEvent.message)) {
logEvent.message = logEvent.message.replace(/\{\}/, args[i]);
}
else if (args[i] instanceof Error) {
logEvent.error = args[i];
}
else {
logEvent.properties = args[i];
}
}
return logEvent;
};
/**
* Returns whether or not the script is in strict mode
*
* @private
* @function
*
* @returns {boolean}
*/
Logger.prototype._isNotStrict = function () {
var _this = this;
return (function () { return !_this; })();
};
return Logger;
}());
exports.Logger = Logger;