簡體   English   中英

NestJS:如何為不同環境設置全局日志級別

[英]NestJS: How to set global log level for different environments

我正在使用 NestJS 內置記錄器。 我找不到設置全局日志級別的選項。 例如,對於開發環境,日志級別為“詳細”,對於生產環境,日志級別為“錯誤”。

另外,是否有一個選項可以禁用 NestJS 在輸出中添加的內容,即時間戳和其他信息,並且只記錄消息? 我需要這個,因為我們使用 Kibana 日志,它會自動添加必填字段。

您可以在main.ts文件中設置日志級別:

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

您可以使用該邏輯編寫自己的 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(),
});

我也找了一個日志級別切換器,但我沒有找到。

正如之前的評論中所建議的,您可以創建一個自定義記錄器並將其全局ApplicationModuleApplicationModule

這個自定義記錄器將由 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(),
 });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM