我已经实施了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!
答案 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接口