NestJs 创建用于记录的自定义服务 - 不打印输出

Posted

技术标签:

【中文标题】NestJs 创建用于记录的自定义服务 - 不打印输出【英文标题】:NestJs creating a custom service for logging - not printing the output 【发布时间】:2021-07-12 00:42:42 【问题描述】:

我正在尝试创建一个将扩展 Logger 的 NestJs 服务。然而,它没有打印所需的输出(例如,super.warn();详见下文)。我相信我正在做的几乎是来自 nestjs 网站的教程,但我似乎无法让它工作。 https://docs.nestjs.com/techniques/logger#using-the-logger-for-application-logging

I want to use custom logging.
src
  - a module
     - a.service.ts
     - a.module.ts
  - log module
     - log.service.ts // my custom log service
     - log.module.ts
  - PlainLogger (no module, no @Injectable(), just a plain class)

A.service.ts(我正在运行 a.service.spec.ts 来测试日志的输出)

a.service.ts

@Injectable()
export class AService 
 
private readonly plainLogger = new PlainLogger()

constructor(private logService: LogService) 
   this.logService.setContext("some context")
   

aMethod() 
  // plainService.meow("some input") This behaves as expected
  this.logService.meow("some input"); 
    

我的 log.service.ts

    import  Logger  from '@nestjs/common';

    @Injectable(scope:Scope.TRANSIENT)
    export class LogService extends Logger 

    meow(message:string) 
       super.warn(message) // This does NOT get printed. My goal is to get this printed.
       Logger.warn("static warning") // This gets printed
       return 1337
    
  

看了一下,super.warn(...) 好像没有在终端打印出日志,但是如果我用PlainLogger,基本上是一样的方法(除了它只是一个没有任何模块的普通类,并且没有@Injectable注解)作为我的自定义日志服务。

从我发布的教程链接中,似乎可以创建日志服务,但我不太确定出了什么问题。任何见解将不胜感激。

【问题讨论】:

【参考方案1】:

事实证明,日志确实是通过调用服务来打印的(例如,通过控制器调用服务,但简单地运行规范(测试文件)似乎不起作用。

【讨论】:

以上是关于NestJs 创建用于记录的自定义服务 - 不打印输出的主要内容,如果未能解决你的问题,请参考以下文章

NestJS 的自定义路由装饰器

创建用于使用NLog记录的自定义扩展功能

HTTPS 不适用于 Amazon Cloudfront 中的自定义域

NestJS-Prisma 如何使用关系字段创建记录?

vue实现的随意拖拽的自定义表单,用于医院文书开发,提高实施效率

vue实现的随意拖拽的自定义表单,用于医院文书开发,提高实施效率