【问题标题】:How to use Winston Logger in NestJS separate module that doesn't use Classes如何在不使用类的 NestJS 单独模块中使用 Winston Logger
【发布时间】:2021-04-06 18:00:59
【问题描述】:

我尝试了几种不同的方法。

我目前无法将 Winston 设置为 NestJS 的默认记录器,因为它抱怨“getTimestamp”函数不在实例中。

所以 - 对于 NestJS 中的控制器 - 我使用了依赖注入 - 这对于 api(REST 端点)非常有效。

问题是我已经远离 OOP - 所以我所有的库都是用 typescript 作为函数编写的。不是纯函数,但比 OOP 方法更好(错误少得多!)

我的问题是 - 如何访问我的库中没有类的主要 winston 记录器。

我正在使用库nest-winston。

【问题讨论】:

  • 不使用类,你是如何使用 Nest 的?这就是整个依赖注入系统(大部分)是围绕着构建的
  • @JayMcDoniel Nest 仅用于 API。 API 调用我的其余功能,这些功能位于具有更多功能编程方法的库中。
  • 我很想看看你的方法。如果没有依赖注入,您必须设置一个可以全局访问的 winston 实例,将 winston 实例传递给每个函数,或者在每个方法中设置一个 winston 实例。这些对我来说似乎都没有真正的吸引力,但没有 DI 就没有好的解决方案。
  • 谢谢@JayMcDoniel - 是的,我一开始并不太热衷于 OOP。自从转向功能更强大的编程方法后,我获得了更快、更无错误的代码。我只想将 NESTJS 用于快速 REST API
  • 那么你最好使用 Express。 Nest 非常适合带有类和其他面向对象原则的 OOP 代码。

标签: nestjs winston


【解决方案1】:

你试过了吗?

使用 createLogger 函数在应用程序生命周期之外创建记录器,并将其传递给 NestFactory.create (nest-winston docs)

您可以有一个单独的文件来创建日志记录实例,然后将其导入您的模块/库以及将其导入您的main.ts

// src/logger/index.ts
import { WinstonModule } from 'nest-winston';

export const myLogger = WinstonModule.createLogger({
  // options (same as WinstonModule.forRoot() options)
})
// src/myLib/index.ts
import { myLogger } from '@/logger' // I like using aliases

export const myLib = () => {
  // ...
  myLogger.log('Yay')
}
// src/main.ts
import { myLogger } from '@/logger' 
async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    logger: myLogger
  });
}
bootstrap();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-06
    • 2013-01-09
    • 2020-03-23
    • 2016-04-20
    • 1970-01-01
    • 2020-09-05
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多