如何从NPM软件包中进行日志记录而无需强制使用日志记录库

时间:2018-11-13 16:02:15

标签: node.js typescript logging npm

我正在编写公司的npm软件包(使用打字稿),并将现有代码移植到其中。在现有代码中,有一些console.logconsole.warnconsole.error语句。像这样:

try {
    const foo = getFoo("bar");
    return callback(undefined, foo);
} catch (e) {
    console.error(e);
    return cb(new httpErrors.BadRequest("Some message"));
}

所以发生了什么事

  • 记录错误
  • 调用另一个错误的回调,而不传递原始错误

这是我们想要的行为,因为我们不想返回原始错误消息,但是我们确实希望在日志中显示它。

现在我要搬到一个包装上,我想应用一些最佳实践并删除console调用。这是一条tslint规则,我同意这不是由软件包作者填写软件包用户的日志。

那么这里最好的方法是什么?

我已经阅读了debug软件包,但这只是出于开发目的。另外,这意味着除非设置DEBUG=...

,否则我们不会收到日志消息

我想知道是否可以在包中使用单例EventEmitter。但话又说回来,单例被视为反模式。

我不想添加日志记录库作为依赖项,因为作为包作者,我不能决定要使用哪个日志记录库。

我考虑过的最后一个选择是允许传入一个我可以随后调用的日志记录函数,但是这让我感到有些沮丧。

那么允许从(TypeScript / npm)库中记录消息的首选技术是什么?

(如果有的话,我是Node / TypeScript生态系统的新手)。

1 个答案:

答案 0 :(得分:1)

  

那么允许从(TypeScript / npm)库中记录消息的首选技术是什么?

您想要处理默认的错误行为,但又让使用者有机会查看错误消息。

您的选择实际上是

  1. 采取零依赖关系并例如使用事件发射器将这些消息带外提供
  2. 依赖于您选择的日志记录库。

我很乐意使用选项1。对于TypeScript,我也会使用类型安全的版本,例如https://basarat.gitbooks.io/typescript/docs/tips/typed-event.html