NestJS:如何为不同的环境设置全局日志级别

时间:2019-08-04 08:03:01

标签: logging nestjs

我正在使用NestJS内置记录器。我找不到设置全局日志级别的选项。例如对于开发人员环境,日志级别为“详细”;对于产品环境,日志级别为“错误”。

还有,是否有一个选项可以禁用NestJS在输出中添加的内容(即时间戳和其他信息),并且仅记录消息?我需要这个,因为我们使用Kibana日志,它会自动添加必填字段。

3 个答案:

答案 0 :(得分:2)

您可以在main.ts文件中设置日志级别:

const app = await NestFactory.create(AppModule, {
  logger: process.env.NODE_ENV === 'development' ? ['log', 'debug', 'error', 'verbose', 'warn'] : ['error', 'warn'],
});

答案 1 :(得分:1)

您可以使用该逻辑编写自己的Logger并将其用作服务,也可以全局设置它

export class MyLogger extends Logger {
  error(message: string, trace: string) {
    // add your tailored logic here
    super.error(message, trace);
  }
}

const app = await NestFactory.create(ApplicationModule, {
  logger: new MyLogger(),
});

答案 2 :(得分:0)

我也在寻找日志级别切换器,但没有找到。

如上一条注释中所述,您可以创建一个自定义记录器并将其全局应用到ApplicationModule

此自定义记录器将由Nest或您在控制器/服务/等中调用。

            NestJs
                    \
                      use -> CustomLogger 
                    /
Your business logic

在您的CustomLogger中,调用super.logger(nestjs内置记录器)和winston logger

Winston Logger可以与kibana的运输工具一起设置,并接受日志级别。

const winstonLogger = new winston.Logger({
                 level: LOG_LEVEL,
                 transports: [
                    <here enable trasport for logstash/kibana>
                  }),
                ],
                ...
               });

export class CustomLogger extends Logger {

  debug(message: string) {
    super.error(message, trace);
    winstonLogger.error(message)
  }

  ... (the same for warn, error, etc)
}

最后注册CustomLogger

 const app = await NestFactory.create(ApplicationModule, {
  logger: new CustomLogger(),
 });