@project-sunbird/logger
Version:
Sunbird logger library
90 lines (89 loc) • 3.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.WinstonAdopter = void 0;
var _a = require('winston'), createLogger = _a.createLogger, format = _a.format, transports = _a.transports;
require('winston-daily-rotate-file');
var stringify = require('json-stringify-safe');
var path = require("path");
var WinstonAdopter = /** @class */ (function () {
function WinstonAdopter() {
this.transports = [];
this.exceptionHandlers = [];
}
WinstonAdopter.prototype.initialize = function (config) {
this.config = config;
this.transports = [this.getDailyRotateFileLogger('app')];
this.exceptionHandlers = [this.getDailyRotateFileLogger('exceptions')];
if (process.env.NODE_ENV !== 'production') {
this.transports.push(new transports.Console());
this.exceptionHandlers.push(new transports.Console());
}
var combineMessage = format(function (info, opts) {
var splat = info[Symbol.for('splat')] || [];
if (splat.length) {
info.message = typeof info.message === 'object' ? JSON.stringify(info.message) : info.message;
splat.forEach(function (arg) {
if (typeof arg === 'object') {
info.message = info.message + ' ' + stringify(arg);
}
else {
info.message = info.message + ' ' + arg;
}
});
info[Symbol.for('splat')] = [];
}
return info;
});
this.logger = createLogger({
level: this.config.logLevel,
defaultMeta: this.config.context,
format: format.combine(combineMessage(), // should be added at first
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), format.json()),
transports: this.transports,
exceptionHandlers: this.exceptionHandlers,
});
return true;
};
WinstonAdopter.prototype.enableDebugMode = function (time, logLevel, combineLogs) {
var _this = this;
if (time === void 0) { time = 1000 * 60 * 10; }
if (logLevel === void 0) { logLevel = 'debug'; }
if (combineLogs === void 0) { combineLogs = false; }
var dailyFileLogger = combineLogs ? this.getDailyRotateFileLogger('app') : this.getDailyRotateFileLogger('debug');
this.logger
.clear()
.add(dailyFileLogger)
.add(new transports.Console());
this.logger.level = logLevel;
setTimeout(function () {
_this.logger.clear();
_this.logger.level = _this.config.logLevel;
_this.logger.add(_this.getDailyRotateFileLogger('app')).add(new transports.Console());
}, time);
return true;
};
WinstonAdopter.prototype.getDailyRotateFileLogger = function (fileName) {
return new transports.DailyRotateFile({
auditFile: path.join(this.config.logBasePath, 'audit.json'),
filename: path.join(this.config.logBasePath, fileName + '-%DATE%.log'),
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '10m',
maxFiles: '10d',
json: true,
});
};
WinstonAdopter.prototype.getLogs = function (options) {
var _this = this;
return new Promise(function (resolve, reject) {
_this.logger.query(options, function (err, results) {
if (err) {
reject(err);
}
resolve(results);
});
});
};
return WinstonAdopter;
}());
exports.WinstonAdopter = WinstonAdopter;