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
创建了一个日志记录器。我们配置了控制台输出和两个文件输出,分别用于记录错误日志和综合日志。通过 log
和 error
方法,我们可以在应用的不同地方记录日志。
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 地址。
控制台中出现了请求信息
文件combined.log也记录下来了这次请求信息
这样,你就完成了在 Nest.js 项目中集成日志管理功能的操作。日志可以帮助你更好地监控和维护应用,及时发现问题和异常,并了解应用的运行情况。
尾语
在开发过程中,集成日志管理是保证应用健壮性和可维护性的重要一步。通过记录关键信息和事件,你可以更好地了解应用的运行情况,快速排查问题,并及时作出调整。使用 winston
日志库,我们成功地在 Nest.js 项目中实现了日志记录,不仅能够在控制台实时查看信息,还能将关键数据保存到文件中,为后续的分析和问题追溯提供了有力的支持。在日常开发和运维中,良好的日志管理将成为你的得力助手,帮助你构建更可靠的应用。
最后感谢你的阅读,如果你觉得文章对你有用,可以给我一个👍哦。