winston-gelf-transporter
Version:
A Winston transporter for sending GELF messages
106 lines • 3.74 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const winston_transport_1 = __importDefault(require("winston-transport"));
const gelf_pro_1 = __importDefault(require("gelf-pro"));
const os_1 = __importDefault(require("os"));
const MIN_PORT = 0;
const MAX_PORT = 65535;
class WinstonGelfTransporter extends winston_transport_1.default {
constructor(options) {
super(options);
this.logLevels = Object({
emerg: 0,
alert: 1,
crit: 2,
error: 3,
warn: 4,
notice: 5,
info: 6,
debug: 7
});
this.options = options;
const logConfig = Object({ fields: {} });
// Update protocol if provided
if (options.protocol) {
logConfig.adapterName = options.protocol;
}
// Update host and port information if provided
if (options.port || options.host) {
logConfig.adapterOptions = {};
if (options.port &&
options.port >= MIN_PORT &&
options.port < MAX_PORT) {
logConfig.adapterOptions.port = options.port;
}
if (options.host) {
logConfig.adapterOptions.host = options.host;
}
}
logConfig.fields = options.hostName
? { host: options.hostName }
: { host: os_1.default.hostname() };
if (options.additional) {
logConfig.fields = Object.assign(Object.assign({}, logConfig.fields), options.additional);
}
this.objectSerializer = JSON.stringify;
gelf_pro_1.default.setConfig(logConfig);
this.gelfClient = gelf_pro_1.default;
}
/**
* This function will return a network connector
* for sending GELF messages.
* @returns A TCP Client for graylog.
*/
getNetworkConnector() {
return this.gelfClient;
}
getLogLevel(level) {
return this.logLevels[level];
}
setObjectSerializer(serializer) {
this.objectSerializer = serializer;
}
getLogMessage(info) {
let { message } = info;
const logData = Object.assign({}, info);
delete logData.message;
delete logData.level;
if (info.stack && typeof message === 'string') {
// Info is an error, send an error object
message = new Error(message);
message.stack = info.stack;
}
else if (!(message instanceof Error)) {
if (info.message instanceof Object) {
// Message is an object, get string representation
message = this.objectSerializer(message);
}
else if (Object.keys(logData).length) {
// Got a message string with additional object param
message = this.objectSerializer(Object.assign({ message }, logData));
}
}
return message;
}
log(info, next) {
const level = this.getLogLevel(info.level);
if (this.level && level > this.getLogLevel(this.level)) {
// Don't log if level is too high
if (next) {
next();
return;
}
return;
}
const message = this.getLogMessage(info);
this.gelfClient.message(message, this.getLogLevel(info.level), next);
}
close() {
this.gelfClient.message('Connection closed', this.logLevels.info);
}
}
exports.default = WinstonGelfTransporter;
//# sourceMappingURL=WinstonGelfTransporter.js.map