Xos*_*fox 6 logging dependency-injection node.js winston
我为nodejs编写了这个模块,可用于从任何地方通过sockjs向客户端分发事件.
现在我想包括一些可配置的日志记录机制.
目前,我正在添加winston作为依赖项,要求它作为每个类中的记录器并使用logger.error,logger.warn,...
#logger.js
var logger = require('winston');
module.exports=logger;
Run Code Online (Sandbox Code Playgroud)
和
#myClass
var logger = require("./logger");
logger.error("Something went wrong")
Run Code Online (Sandbox Code Playgroud)
现在,如何让记录器可以被自定义记录器替换,或者让用户从OUTSIDE my module配置日志级别?
他们当然不必触摸模块代码来更改记录器,但能够使用loglevel创建记录器,我的模块应该使用它(如果可用).
有关如何做到这一点的任何推荐?
或者是对"winston"的硬依赖,并且可以通过npm-config配置日志级别吗?
好吧,我建议根本不包括温斯顿。Winston 有点大,包含许多用户可能不会使用的好功能,我相信您的模块应该足够小,以便用户始终使用它的所有功能。如果有他们不想使用内置记录器的情况,那么我猜它还不够小。话虽如此,在需要调试时使用模块日志记录是有帮助的。
如果您想让开发人员使用您的模块来调试带有日志的模块,那么我建议您拥有一个可以打开/关闭的调试模式。
你可以使用这样的东西来帮助你:https : //www.npmjs.org/package/debug
如果用户想集成他们自己的日志系统,我建议你有一种方法可以让他们通过你的模块一个日志功能。像这样的东西(让我们称你的模块为摇滚袜子:
var rockTheSock = require('rock-the-sock');
var rockTheSock.logger = function (level, message, metadata) {
console.log('level :', level, message, metadata); // TODO: Integrate winston
};
rockTheSock.startRocking();
Run Code Online (Sandbox Code Playgroud)
然后在你的模块中你会有一个默认的记录器,它可以如上所示覆盖。
socket.io 是一个很好的例子,它是如何完成的(虽然你并不真正需要 configure 方法,那只是花里胡哨):
以下是覆盖 socket.io 默认记录器的方法:https : //github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO
记录器以这种方式实现的地方:https : //github.com/LearnBoost/Socket.IO/blob/0.9.14/lib/logger.js
如果出现问题,请尝试抛出错误,或发出“错误”事件或使用错误调用回调(以适用的方式执行)。默默地记录它,不是一个好主意。如果您正在报告它,那么让用户代码处理它。也许错误是预料之中的(你不知道人们以什么疯狂的方式使用你的模块!)。
| 归档时间: |
|
| 查看次数: |
3444 次 |
| 最近记录: |