@firstfleet/ffsyslog

A syslog transport for winston with custom colors and better formatting. A fork of winston-syslog.

Usage no npm install needed!

<script type="module">
  import firstfleetFfsyslog from 'https://cdn.skypack.dev/@firstfleet/ffsyslog';
</script>

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);
                                });
                            }
                        })