logzilla
Version:
Node.js Logging Adapter for Devebot
99 lines (95 loc) • 3.02 kB
JavaScript
;
const events = require('events');
const util = require('util');
const Validator = require('./validator');
const validator = new Validator();
const winston = require('winston');
require('winston-daily-rotate-file');
const constructors = {
'console': winston.transports.Console,
'file': winston.transports.File,
'http': winston.transports.Http,
'dailyRotateFile': winston.transports.DailyRotateFile
};
const Consts = require('./consts.js');
const Logger = require('./logger.js');
const defaultTransports = [new winston.transports.Console({
json: false,
timestamp: true,
colorize: true,
level: Consts.defaultLevel
})];
function Service(params = {}) {
events.EventEmitter.call(this);
if (params.validated != true) {
const result = validator.validate(params, Service.argumentSchema);
if (!result.ok) {
const err = new Error('Constructor argument validation is failed');
err.name = 'ValidatingArgumentError';
throw err;
}
}
var loggerConfig = params.logger || {};
// defines levels & colors
var __levels = loggerConfig.levels || Consts.levelDefs.levels;
var __colors = loggerConfig.colors || Consts.levelDefs.colors;
// defines transports
var __transports = [];
var disabledTransports = [];
var transportDefs = loggerConfig.transports || [];
transportDefs.forEach(function (transportDef) {
__transports.push(new constructors[transportDef.type](transportDef));
if (transportDef.enabled == false || transportDef.silent == true) {
disabledTransports.push(transportDef.name || transportDef.type);
}
});
if (__transports.length == 0) {
__transports.push.apply(__transports, defaultTransports);
}
// create logger object
var loggerOpts = {
levels: __levels,
colors: __colors,
transports: __transports,
exitOnError: false
};
if (loggerConfig.exceptionCaught) {
loggerOpts.exceptionHandlers = defaultTransports;
}
var logger = new Logger(loggerOpts);
logger.activate(false, disabledTransports);
this.getLogger = function () {
return logger;
};
this.getServiceInfo = function () {
return {
levels: __levels,
colors: __colors,
transports: logger.getTransportInfos(),
disabledTransports: disabledTransports
};
};
this.getServiceHelp = function () {
var info = this.getServiceInfo();
return {
type: 'record',
title: 'Logdapter information',
label: {
logger_levels: 'Levels',
logger_colors: 'Colors',
transports: 'Defined transports',
disabled_transport_names: 'Disabled transports'
},
data: {
logger_levels: JSON.stringify(info.levels, null, 2),
logger_colors: JSON.stringify(info.colors, null, 2),
transports: JSON.stringify(info.transports, null, 2),
disabled_transport_names: info.disabledTransports
}
};
};
}
;
util.inherits(Service, events.EventEmitter);
Service.argumentSchema = Consts.argumentSchema;
module.exports = Service;