Nodejs Winston Emit в сокет

Я реализовал Winston для регистрации моего приложения nodejs. В настоящее время я пишу журнал для файлов журнала, используя транспорт «DailyRotateFile» Winston, и вывожу данные журнала на консоль.

Я хочу добавить дополнительный транспорт, который отправляет сообщение журнала в сокет, чтобы я мог выводить его в веб-интерфейс, который я создал с помощью Express, через 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.

EDIT Похоже, что причина, по которой он продолжает выводить «LOG STREAM», заключается в том, что он отправляет все сообщения, которые были сохранены в файле журнала, даже несмотря на то, что я установил «start -1»

Я был бы очень признателен за любые предложения о том, как правильно этого добиться. ТИА!


person Ronny vdb    schedule 20.02.2015    source источник


Ответы (1)


Вот как мне удалось добиться отправки журналов 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.

person Ronny vdb    schedule 23.02.2015
comment
я получил ошибку подписки, и я не могу найти какие-либо документы о winston webhook › TypeError: winston.transports.Webhook не является функцией - person Grant Fong; 26.04.2016
comment
Winston 2.0 удалил транспорты Webhook. Вместо этого используйте HTTP - person Mauricio Pastorini; 26.11.2018