Nodejs Winston 发送到套接字

Nodejs Winston Emit to socket

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

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

这是我目前设置 Winston 的方式:

  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!

这就是我如何成功地将 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 接口