Как я могу зарегистрировать Socket.io через Winston?

Я хотел бы использовать Winston в качестве регистратора для Socket.io. Я видел эту проблему, где говорится:

var io = require('socket.io').listen(8080);
io.set('logger', { debug: <log function>, info: … , error: .., warn: .. })

К сожалению, не описано, как должно выглядеть log function.

Некоторые игры и просмотр документации документации Socket.io сказали мне, что нет фиксированного набора параметров: есть сообщения журнала с одним, двумя и тремя параметрами. Возможно, есть еще больше, я не знаю.

Я думаю, что это не очень хорошая практика иметь число параметров undefined, особенно если это ваш интерфейс к внешним компонентам.

В любом случае... есть ли у кого-нибудь опыт? Может ли кто-нибудь указать, на что нужно следить?

Ответ 1

Кажется, это отлично работает для меня

var io = require('socket.io').listen(server, {
    logger: {
        debug: winston.debug, 
        info: winston.info, 
        error: winston.error, 
        warn: winston.warn
    }
});

В качестве бонуса, установив логгер в том же вызове, что и .listen(), вы поймаете весь выход журнала из Socket.IO. Обратите внимание, что вы должны просто передать winston вместо этого объекта, но он не работает для меня, поэтому вместо этого я разместил это решение.

Ответ 2

Вы можете просто подключить экземпляр winston в качестве объекта журнала:

var winston = require('winston');

io.set('logger', winston);

Ответ 3

Так как параметр logger socket.io v1.0 больше не работает. Они переключились на debug

Вы можете обратиться к этой проблеме на как настроить Winston с socket.io