Nodejs Winston Emit to socket

时间:2015-02-20 12:16:09

标签: node.js socket.io winston

我已经实施了Winston来记录我的nodejs应用程序。 目前我正在使用" DailyRotateFile"将日志写入日志文件。传输Winston,并将日志数据输出到控制台。

我想添加一个额外的传输,将日志消息发送到套接字,以便我可以将它输出到我使用Express创建的Web界面,通过socket.io。

这是我设置温斯顿的最新方式:

  var logger = new winston.Logger({
    transports: [
        new winston.transports.DailyRotateFile({
            level: 'info',
            filename: './Logs/server',
            datePattern: '.yyyy-MM-dd.log',
            handleExceptions: true,
            json: true,
            maxsize: 5242880, // 5MB
            maxFiles: 5,
            colorize: false
        }),
        new winston.transports.Console({
            level: 'debug',
            handleExceptions: true,
            json: false,
            colorize: true
        })
    ],
    exitOnError: false
})

这是我目前用来发出日志消息的代码:

var logStream = logger.stream({
    start: -1
})

logStream.on('log', function(log){
    console.log('LOG STREAM')
    //console.log(log)
    io.emit('logger', log);
})

然而,这不断输出" LOG STREAM"当我启动服务器时到nodejs控制台,当我使用logger.info命令时,它没有发出任何内容。

修改 所以看起来它继续输出" LOG STREAM"是因为它发送了所有已保存在日志文件中的消息,即使我设置了" start -1"

我真的很感激任何有关如何正确实现这一目标的建议。 TIA!

1 个答案:

答案 0 :(得分:0)

这就是我设法将Winston日志发送到浏览器的方法

我添加了以下传输:

new winston.transports.Webhook({
            host: '192.168.51.242',
            port: 8102,
        }),

然后我创建了一个TCP端口来接收日志消息:

http.createServer(function(req, res){
    var logMsg = '';
    req.on('data', function(data){
        logMsg += data.toString()
    })
    req.on('end', function(data){
        io.emit('logger', logMsg)
    })
}).listen(8102)

每次我收到数据到端口时,我都会使用Socket.IO将它发送到我的Angualr接口