【问题标题】:How to log from a NPM package, without forcing a logging library如何在不强制使用日志库的情况下从 NPM 包进行日志记录
【发布时间】:2019-04-16 12:24:50
【问题描述】:

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

【问题讨论】:

    标签: node.js typescript logging npm


    【解决方案1】:

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

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

    你的选择实际上是

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

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

    【讨论】:

    • 我最终使用了 eventEmitter。
    猜你喜欢
    • 1970-01-01
    • 2014-03-04
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2013-01-21
    • 2021-09-16
    • 1970-01-01
    相关资源
    最近更新 更多