自定义logging器和Socket.io 1.x

在Socket.io的 1.0之前的版本中,似乎可以在实例化时使用logging器选项来设置logging ,但是我似乎无法在1.0之后做到这一点。 我是正确的,他们已经删除了这个选项,有没有什么好的方法,我可以通过钩住/侦听错误从Socket.io似乎现在使用debugging模块,而无需修改现有的模块。 我想用Bunyan来logging我的socket信息。

要使用新的socket.io进行login,可以使用以下命令:

DEBUG=* // all DEBUG=socket.io:* // all in socket.io module DEBUG=socket.io:server // only server debugger 

经过一番研究,我创build了一个简单的包装:

 var wrapper = function (http, opts) { var logCB = function (str) { fs.writeFileSync("a.txt", "SOCKET.IO " + str + "\n", {flag: 'a'}); }; var io = require('socket.io')(http, opts); var ret = { 'use': function (f) { io.use(f); }, 'sockets': { 'on': function (evt, fn) { logCB("ON " + evt); io.sockets.on(evt, function (socket) { var newSocket = Object.create(socket); newSocket.on = function (ev, cb) { socket.on(ev, function (data, ok) { logCB("ON " + ev + " DATA " + JSON.stringify(data)); cb(data, ok); }); }; newSocket.emit = function (ev, data) { logCB("EMIT " + ev + " DATA " + JSON.stringify(data)); socket.emit(ev, data); }; fn(newSocket); }); } } }; return ret; }; 

用它代替传统的要求:

 httpServer.listen(80, ip); var io = wrapper(httpServer, sockOpts); 

如果你愿意,请改进它。