@firstfleet/ffsyslog
v1.0.14
Published
A syslog transport for winston with custom colors and better formatting. A fork of winston-syslog.
Downloads
63
Readme
winston-syslog
A Syslog transport for [winston][0]. This is a fork of [winston-syslog][1]. Have added colors for different log levels and better message formatting for use with papertrail. Feel free to to use this and clean it up if you want.
const winston = require('winston');
require('@firstfleet/ffsyslog').Syslog;
This logger accepts the same options as [winston-syslog][1]
const transport = new winston.transports.Syslog(options);
winston.add(transport) || winston.createLogger({transports[transport]})
Magic sauce the formats and colors message. Uses ansi-colors npm package.
let output;
if (info.stack) {
//sender, method, message, severity, isOperational
output = info.stack.split("\n")
if (info.sender) {
output.unshift(`sender: ${info.sender}`)
}
if (info.method) {
output.unshift(`method: ${info.method}`)
}
if (info.severity) {
output.unshift(`severity: ${info.severity}`)
}
if (info.isOperational) {
output.unshift(`isOperational: ${info.isOperational}`)
}
if (info.message) {
output.unshift(`Error: ${info.message}`)
}
} else {
output = info.message.split("\\n");
if (output.length === 1) {
try {
//is a json object
output = output[0].split(",");
}
catch (e) {
console.log(e)
}
}
}
output.forEach((item, index) => {
let colorItem;
if (info.level === 'info') {
colorItem = c.cyan(`<<<${info.level}>>> ${item}`)
} else if (info.level === 'error') {
colorItem = c.red(`<<<error>>> ${item}`)
} else if (info.level === 'warn') {
colorItem = c.yellow(`<<<${info.level}>>> ${item}`)
} else {
colorItem = `<<<${info.level}>>> ${item}`
}
let message = this.producer.produce({
severity: level,
host: this.localhost,
date: new Date(),
message: colorItem
})
const buffer = new Buffer(message);
if (this.protocolType === 'udp') {
this.inFlight++;
this.socket.send(buffer, 0, buffer.length, this.port, this.host, onError);
} else if (this.protocol === 'unix') {
this.inFlight++;
this.socket.send(buffer, 0, buffer.length, this.path, onError);
} else if (this.congested) {
this.queue.push(syslogMsg);
} else {
this.socket.once('congestion', onCongestion);
this.inFlight++;
this.socket.send(buffer, (e) => {
this.socket.removeListener('congestion', onCongestion);
onError(e);
});
}
})