首页 > 解决方案 > 如何在不强制使用日志库的情况下从 NPM 包中进行日志记录

问题描述

我正在编写一个公司 npm 包(在打字稿中),并将现有代码移植到其中。在现有代码中,有一些console.log,console.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 生态系统还很陌生)。

标签: node.jstypescriptloggingnpm

解决方案


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

您希望处理默认错误行为,同时让消费者有机会查看错误消息。

从字面上看,您的选择是

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

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


推荐阅读