nest集成日志管理

前言

当集成日志管理时,你需要在 Nest.js 项目中添加日志功能来记录应用的运行状态和事件。日志是开发和维护应用的重要工具,它可以帮助你追踪问题、监控性能,并了解应用的运行情况。在这篇文章中,我们将介绍如何使用 winston 日志库在 Nest.js 项目中集成日志管理功能。

集成日志管理

0.准备工作

在开始之前,确保你的 Nest.js 项目已经搭建好,并且你已经安装了 @nestjs/common 和其他所需的依赖。同时,我们将使用 winston 日志库来实现日志管理功能,因此需要确保已经安装了它:

npm install winston  --save  

1.service层

在 Nest.js 项目中,我们首先需要创建一个用于日志记录的服务。在你的 logger 目录下,创建一个名为 logger.service.ts 的文件,并添加以下代码:

import { Injectable } from '@nestjs/common';
import { createLogger, format, transports } from 'winston';

@Injectable()
export class LoggerService {
  private readonly logger = createLogger({
    level: 'info',
    format: format.combine(
      format.timestamp(),
      format.json()
    ),
    transports: [
      new transports.Console(),// 控制台输出
      new transports.File({ filename: 'logs/error.log', level: 'error' }),// 错误日志文件
      new transports.File({ filename: 'logs/combined.log' }),// 综合日志文件
    ],
  });

  log(message: string) {
    this.logger.info(message);
  }

  error(message: string, trace: string) {
    this.logger.error(message, { trace });
  }
}

2.module层

为了在应用中使用这个日志服务,我们需要创建一个日志模块,并将日志服务注册到 Nest.js 的依赖注入系统中。在你的 logger 目录下,创建一个名为 logger.module.ts 的文件,并添加以下代码:

import { Module } from '@nestjs/common';
import { LoggerService } from './logger.service';

@Module({
  providers: [LoggerService]
})
export class LoggerModule {}

在这个服务中,我们使用 winston 创建了一个日志记录器。我们配置了控制台输出和两个文件输出,分别用于记录错误日志和综合日志。通过 logerror 方法,我们可以在应用的不同地方记录日志。

3.创建中间件

接下来,我们需要创建一个中间件,用于记录请求的日志信息。在你的 middleware 目录下,创建一个名为 logger.middleware.ts 的文件,并添加以下代码:

import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
import { LoggerService } from '../api/logger/logger.service'; // 假设你的LoggerService路径在这里

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  constructor(private readonly loggerService: LoggerService) {}

  use(req: Request, res: Response, next: NextFunction) {
    const { method, originalUrl, ip } = req;
    this.loggerService.log(`[${method}] ${originalUrl} from ${ip}`);
    next();
  }
}

在这个中间件中,我们使用 LoggerService 记录了请求的信息,包括请求方法、URL 和 IP 地址。

4.配置中间件

最后,在你的 app.module.ts 文件中,配置中间件,将 LoggerMiddleware 应用到所有的 GET 请求上。这样,每当有 GET 请求时,日志中间件都会被触发,记录请求的信息。

//app.module.ts

import { Module, NestModule, MiddlewareConsumer,RequestMethod  } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import {LoggerService} from "./logger/logger.service";
import {LoggerMiddleware} from "./middleware/logger.middleware";



@Module({
  imports: [

  ],
  controllers: [AppController],
  providers: [
    AppService,
    LoggerService
  ],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(LoggerMiddleware).forRoutes({ path: '*', method: RequestMethod.GET});
  }
}

测试日志效果

现在,你已经成功集成了日志管理功能。当你运行项目并访问相应的路由时,你将看到控制台和日志文件中记录了请求信息,包括请求的方法、URL 和 IP 地址。

image.png 控制台中出现了请求信息

image.png 文件combined.log也记录下来了这次请求信息

这样,你就完成了在 Nest.js 项目中集成日志管理功能的操作。日志可以帮助你更好地监控和维护应用,及时发现问题和异常,并了解应用的运行情况。

尾语

在开发过程中,集成日志管理是保证应用健壮性和可维护性的重要一步。通过记录关键信息和事件,你可以更好地了解应用的运行情况,快速排查问题,并及时作出调整。使用 winston 日志库,我们成功地在 Nest.js 项目中实现了日志记录,不仅能够在控制台实时查看信息,还能将关键数据保存到文件中,为后续的分析和问题追溯提供了有力的支持。在日常开发和运维中,良好的日志管理将成为你的得力助手,帮助你构建更可靠的应用。

最后感谢你的阅读,如果你觉得文章对你有用,可以给我一个👍哦。

全部评论

相关推荐

10-12 19:08
666 C++
花开蝶自来_:技能:听动物叫,让雪豹闭嘴
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务