2013-08-09 8 views
10

Ich möchte Winston als Logger für Socket.io verwenden. Ich habe this issue gesehen, wo es heißt:Wie logge ich Socket.io über Winston ein?

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

Leider ist es nicht beschrieben, was die log function aussehen sollte.

Einige Herumspielen und ein Blick in die Socket.io logger documentation sagte mir, dass es keinen festen Satz von Parametern gibt: Es gibt Protokollmeldungen mit einem, zwei und drei Parametern. Vielleicht gibt es noch mehr, ich weiß es nicht.

Ich denke, das ist definitiv keine gute Praxis, eine undefinierte Anzahl von Parametern zu haben, besonders wenn dies Ihre Schnittstelle zu externen Komponenten ist.

Wie auch immer ... hat jemand Erfahrung damit? Kann jemand darauf hinweisen, worauf man achten sollte?

Antwort

8

Dies scheint für mich

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

Als Bonus zu funktionieren, durch den Logger in dem gleichen Anruf Als .listen() fangen Sie die gesamte Protokollausgabe von Socket.IO ab. Beachten Sie, dass Sie anstelle dieses Objekts winston übergeben können, aber es funktioniert nicht für mich, deshalb habe ich diese Lösung stattdessen gepostet.

+0

Wie würden Sie das gleiche in express.io tun (die Express/socket.io Hybrid) – silkcom

+0

@silkcom Ich habe keine Ahnung, ich habe es nie benutzt. – Brad

0

Sie können einfach Stecker in der winston Instanz als Logger-Objekt:

var winston = require('winston'); 

io.set('logger', winston); 
+0

ich glaube, ich habe es so gemacht, bevor, aber ich kann auf jeden Fall nicht, es funktioniert jetzt bekommen. Ich nehme an, es gab ein Update auf Socket.IO oder Winston, das diese Funktionalität unterbrochen hat? – Brad

Verwandte Themen