Nodejs Nestjs日志记录插件@nestjs/morgan的使用

Nodejs Nestjs日志记录插件@nestjs/morgan的使用
[@nestjs](/user/nestjs)/morgan 是一个用于 NestJS 应用程序的日志记录中间件,它基于 morganmorgan 是一个流行的 HTTP 请求日志记录工具,适用于 Node.js 的 Express 框架。下面是如何在 NestJS 项目中使用 [@nestjs](/user/nestjs)/morgan 插件。

安装

首先,你需要安装必要的包:

npm install [@nestjs](/user/nestjs)/common [@nestjs](/user/nestjs)/core [@nestjs](/user/nestjs)/morgan morgan

配置 Morgan 中间件

接下来,你需要在你的 NestJS 应用程序中配置 Morgan 中间件。这通常在主模块(通常是 AppModule)中完成,但更推荐的方式是在单独的中间件模块中进行配置,以保持项目的整洁。

创建中间件模块

创建一个新的模块,例如 LoggerModule,在这个模块中配置 Morgan 中间件:

import { Module, NestModule, MiddlewareConsumer } from '[@nestjs](/user/nestjs)/common';
import * as morgan from 'morgan';

@Module({
  // 这里可以添加其他需要的模块
})
export class LoggerModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(morgan('combined'))
      .forRoutes('*');
  }
}

这里我们使用了 morgan('combined'),它会提供一个标准的 Apache Combined 日志格式。你也可以选择其他格式,如 'tiny', 'short', 'dev' 等,具体取决于你的需求。

在应用程序中启用 LoggerModule

确保在你的主要应用模块(通常是 AppModule)中导入并使用这个新的 LoggerModule:

import { Module } from '[@nestjs](/user/nestjs)/common';
import { LoggerModule } from './logger/logger.module'; // 假设 LoggerModule 在 logger 文件夹中

@Module({
  imports: [
    // 其他模块
    LoggerModule,
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

测试

启动你的 NestJS 应用程序,并发送一些请求到服务器。你应该能够在控制台看到请求日志输出。

注意事项

  • 确保在生产环境中不要使用开发模式的日志格式(如 'dev'),因为它可能会泄露敏感信息。
  • 如果你使用的是反向代理(如 Nginx),可能需要调整日志记录策略,避免重复记录日志。

通过上述步骤,你应该能够成功地在 NestJS 应用程序中集成和使用 [@nestjs](/user/nestjs)/morgan 插件来记录 HTTP 请求日志。


3 回复

当然,@nestjs/morgan 是一个非常实用的日志记录插件,它基于 Morgan 库,能够帮助你在 NestJS 项目中更优雅地处理 HTTP 请求日志。

首先,你需要安装 @nestjs/morgan 和 Morgan:

npm install --save [@nestjs](/user/nestjs)/morgan morgan

然后,在你的模块文件(例如 app.module.ts)中,你可以这样配置它:

import { Module } from '[@nestjs](/user/nestjs)/common';
import { APP_FILTER, APP_INTERCEPTOR, Logger } from '[@nestjs](/user/nestjs)/core';
import { MorganModule } from '[@nestjs](/user/nestjs)/morgan';
import * as morgan from 'morgan';

@Module({
  imports: [
    MorganModule.forRoot({
      format: 'combined',
      ignore: (req, res) => res.statusCode < 400,
      stream: process.stderr,
    }),
  ],
  providers: [
    {
      provide: APP_INTERCEPTOR,
      useClass: LoggerInterceptor,
    },
  ],
})
export class AppModule {}

这里,我们设置了 Morgan 的格式为 combined,并且只记录状态码大于等于 400 的请求。你也可以自定义拦截器来处理日志输出。

希望这能帮到你!如果需要更多定制化的日志策略,可以考虑使用 NestJS 提供的 Logger 模块。


在NestJS中使用@nestjs/morgan可以很方便地集成morgan中间件来处理HTTP请求的日志记录。Morgan是Node.js中最受欢迎的HTTP请求日志库之一。下面我将指导你如何在NestJS项目中安装和配置@nestjs/morgan

第一步:安装依赖

首先,你需要在你的项目中安装@nestjs/morgan包。打开终端并运行以下命令:

npm install @nestjs/morgan morgan --save

这将会安装@nestjs/morgan以及它的依赖morgan

第二步:导入模块

在你的应用程序主模块(通常是app.module.ts)中,导入MorganModule。你可以通过调用MorganModule.forRoot()来配置morgan的设置。以下是一个简单的示例:

import { Module } from '@nestjs/common';
import { MorganModule, MorganInterceptor } from '@nestjs/morgan';
import * as morgan from 'morgan';

@Module({
  imports: [
    MorganModule.forRoot({
      format: 'combined', // 日志格式,这里使用了'morgan'内置的'combined'格式
      stream: process.stderr, // 输出到标准错误流,你可以选择输出到文件或其它流
    }),
  ],
  providers: [
    {
      provide: APP_INTERCEPTOR,
      useClass: MorganInterceptor('combined'), // 使用全局拦截器
    },
  ],
})
export class AppModule {}

在这个例子中,我们设置了morgan的输出格式为’combined’,并且将其配置为直接输出到标准错误流。我们还添加了一个全局拦截器MorganInterceptor来捕获所有的HTTP请求。

第三步:测试日志记录

启动你的应用,并访问几个不同的路由,你应该能在控制台看到类似下面的输出:

::1 - - [25/Jul/2023:14:45:29 +0000] "GET /api HTTP/1.1" 200 2 "-" "PostmanRuntime/7.28.4" "-"

这个输出包含了客户端IP、请求时间、请求方法、URL、HTTP状态码、响应大小等信息。

这就是如何在NestJS中使用@nestjs/morgan的基本步骤。你可以根据需要调整morgan的配置,比如更改日志格式或者输出目标等。

@nestjs/morgan 是一个用于 NestJS 的日志记录插件,基于 Morgan。要使用它,首先需要安装依赖:

npm install @nestjs/common @nestjs/core morgan

然后,在你的模块中导入 MorganModule 并配置:

import { Module } from '@nestjs/common';
import { MorganModule } from '@nestjs/morgan';

@Module({
  imports: [
    MorganModule.forRoot({
      stream: writeLog, // 自定义日志写入方式
      skip: (req, res) => res.statusCode < 400, // 只记录错误状态码
      format: ':method :url', // 自定义日志格式
    }),
  ],
})
export class AppModule {}

最后,在控制器或服务中注入 RequestResponse 对象来触发日志记录。

回到顶部