gpt4 book ai didi

node.js - Nodejs Winston 发送到套接字

转载 作者:太空宇宙 更新时间:2023-11-04 02:28:43 24 4
gpt4 key购买 nike

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

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

这是我目前设置 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!

最佳答案

我编写了一个自定义 SocketioTransport 传输类,其中包含一个重写的日志,该日志通过 socket.io 函数发出日志。

import Transport = require('winston-transport');

class SocketioTransport extends Transport {
constructor(options?: Transport.TransportStreamOptions) {
super(options);
}

log(info: any, callback: any) {
setImmediate(() => {
this.emit('logged', info);
});

// Send the log message via Socket.IO
io.emit('log', {
level: info.level,
message: info.message,
timestamp: info.timestamp,
// Add any other metadata you want to send
// metadata: info.metadata,
});

callback();
}
}

export const logger = winston.createLogger({
level: 'info',
transports: [
new SocketioTransport(),
new winston.transports.Console(),
new winston.transports.File({ filename: 'logs.log' }),
],
format: winston.format.combine(
winston.format.colorize(),
winston.format.timestamp(),
winston.format.printf(({ timestamp, level, message }) => {
return `[${timestamp}] ${level}: ${message}`;
})
),
});

关于node.js - Nodejs Winston 发送到套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28628795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com