2011-10-01 78 views
7

socket.io似乎有一个基本合理的日志记录系统的所有内部。我如何自己获取该日志记录对象,以便可以在适当的级别生成我自己的日志消息?它让我感到疑惑,即我的console.log()消息在socket.io消息旁边没有被加时间戳,不加水平和丑陋。我已经在socket.io代码中做了一堆探索,并且我现在对节点的了解还不够,无法理解对象层次结构是如何知道如何从我的代码中获取所需对象的。长期来看,我可能会想要一个更强大的日志系统模块(能够记录文件,自动旋转,基于每个模块管理级别,自定义日志级别等)。 Winston看起来很合理,但是我也可以使用socket.io来使用它吗?将所有东西都放在一个地方很好。如何插入socket.io的内置日志记录系统来生成我自己的消息?

回答

8

在使用socket.io,我是能够插入到现有的记录器模块,像这样:

var express = require('express'), 
    app  = module.exports = express.createServer(), //just creating 'app' for io 
    io  = require('socket.io').listen(app), 
    logger = io.log, // access the existing logger setup in socket.io 
    util = require('util'); 

logger.info(util.format("Express server listening on port %d in %s mode", 8003, app.settings.env)); 

Configuring the logger也很简单:

io.configure('production', function(){ 
    io.set('log level', 1); 
} 
3

您是否使用Connect的记录器中间件进行了研究?看起来有人已经为您想要的socket.IO-connect创建了一个库。我使用类似的东西在我Express程序:

var connect = require('connect'); 

module.exports = connect.createServer(
    connect.logger({ format: ':response-time :method :url' }), 
    connect.static(__dirname + '/public) 
); 
+0

这是有希望的!我将在明天仔细研究它,看看它是否强制socket-io通过连接中间件路由它的日志消息。我的回退策略是将套接字日志设置为0,并与Winston一起完成我自己的日志记录。我会失去一些低级别的访问权限,但是如果我在套接字级别遇到问题,我会遇到更大的问题,无论如何都需要进行更加精细的调试。 – drewww

相关问题