如何通过 Winston 登录 Socket.io?

Posted

技术标签:

【中文标题】如何通过 Winston 登录 Socket.io?【英文标题】:How do I log Socket.io through Winston? 【发布时间】:2013-08-11 02:55:15 【问题描述】:

我想使用 Winston 作为 Socket.io 的记录器。我看到this issue 上面写着:

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

很遗憾,没有描述log function 应该是什么样子。

有些人在玩,看看Socket.io logger documentation 告诉我没有固定的参数集:有一个、两个和三个参数的日志消息。也许还有更多,我不知道。

我认为使用未定义数量的参数绝对不是一个好习惯,尤其是当这是您与外部组件的接口时。

无论如何...有人有这方面的经验吗?谁能指出要注意什么?

【问题讨论】:

【参考方案1】:

由于 socket.io v1.0 记录器参数不再起作用。 他们切换到debug

您可以参考how to setup Winston with socket.io这个问题

【讨论】:

【参考方案2】:

这对我来说似乎很好用

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

作为奖励,通过在与.listen() 相同的调用中设置记录器,您可以捕获来自 Socket.IO 的所有日志输出。请注意,您应该能够只传递 winston 而不是该对象,但它对我不起作用,所以这就是我发布此解决方案的原因。

【讨论】:

你如何在 express.io 中做同样的事情(express / socket.io 混合) @silkcom 我不知道,我没用过。【参考方案3】:

您可以简单地将 winston 实例作为记录器对象插入:

var winston = require('winston');

io.set('logger', winston);

【讨论】:

我想我以前也这样做过,但我现在肯定不能让它工作。我想 Socket.IO 或 Winston 的更新已经破坏了这个功能?

以上是关于如何通过 Winston 登录 Socket.io?的主要内容,如果未能解决你的问题,请参考以下文章

jquery终端socket.io登录

验证 socket.io/nodejs 的用户

如何让 Winston 使用 Webpack?

如何解决 Socket.io 404(未找到)错误?

Vue.js 如何使用 Socket.IO?

如何让用户加入他们的多个房间 socket.io