【问题标题】:How to disable NestJS Logger, based on env?如何基于 env 禁用 NestJS Logger?
【发布时间】:2020-07-02 08:15:25
【问题描述】:

我在 NestFactory.create() 方法中使用 logger 选项来控制生产模式下 Logger 的日志级别,但它不适用于 ENV='production',仍然显示 Logger.log() 消息

const bootstrap = async () => {
  const app = await NestFactory.create<NestExpressApplication>(AppModule, {
    logger:
      env.ENV == 'development'
        ? ['debug', 'error', 'log', 'verbose', 'warn']
        : ['error', 'warn'],
  });

  app.enableCors();

  app.use(helmet());
  app.set('trust proxy', 1);

【问题讨论】:

    标签: typescript nestjs


    【解决方案1】:

    在 Node.js 中使用 process.env 全局对象访问环境变量。

    以下示例按预期工作,读取process.env.ENV

    async function bootstrap() {
      const app = await NestFactory.create(AppModule, {
        logger: process.env.ENV === 'production' ? ['warn', 'error'] : ['debug', 'log', 'verbose']
      });
      await app.listen(3000);
    }
    
    bootstrap();
    

    yarn start 显示所有初始化日志,而ENV=production yarn start 显示无初始化日志

    【讨论】:

    • 不是环境解析问题,环境解析正确github.com/HedCET/twitter-bot/blob/master/src/main.ts#L18
    • 我刚刚克隆了您的存储库并测试了您的代码。它按预期工作。从ENV='development' 开始,我可以看到NestJS 的初始化日志(例如“正在启动Nest 应用程序...”),而使用ENV='production' 我只看到错误(MoongoseModule,“无法连接到数据库”)。 (我使用“yarn”安装了所有包并创建了一个空的dotenv文件.development,然后开始使用这两种配置)
    • 我通过在其他服务中使用 Logger 作为依赖注入解决了这个问题
    【解决方案2】:
    1. 我创建了我的自定义记录器
    2. 在根模块中注入。

    在自定义记录器的构造函数中,我使用 setLogLevels 函数放置了我的条件。我将级别设置为空,因此它可以忽略任何控制台标准输出。

    import { ConsoleLogger, Injectable, LoggerService } from '@nestjs/common';
    
    @Injectable()
    export class AppLogger extends ConsoleLogger implements LoggerService {
      constructor(
        context: string,
        options?: {
          timestamp?: boolean;
        },
      ) {
        super(context, options);
        /***
         * @condition to check if it is in testing mode
         */
        if (condition) {
          this.setLogLevels([]);
        }
      }
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 2021-04-06
      • 1970-01-01
      相关资源
      最近更新 更多