基于 Winston 实现 NestJS 应用日志服务

作者:问答酱2024.01.18 10:36浏览量:3

简介:本文将介绍如何使用 Winston 库在 NestJS 应用中实现日志服务。我们将从安装依赖、配置日志服务、创建日志记录器、记录日志信息等方面进行详细阐述。

在 NestJS 应用中实现日志服务,我们可以使用 Winston 库。Winston 是一个流行的 Node.js 日志库,提供了多种日志输出选项和灵活的配置。下面我们将分步骤介绍如何使用 Winston 在 NestJS 应用中实现日志服务。
步骤 1:安装依赖
首先,确保你的 NestJS 应用已经初始化并运行在开发模式下。然后,打开终端,进入你的项目目录,并运行以下命令来安装 Winston 和它的 NestJS 适配器:

  1. npm install --save winston @nestjs/common

步骤 2:配置日志服务
在 NestJS 应用中,我们通常在 app.module.ts 文件中进行全局配置。打开该文件,并引入 WinstonLogger

  1. import { LoggerOptions, WinstonLogger } from '@nestjs/common';
  2. export class AppModule implements NestModule {
  3. configure(consumer: LoggerConsumer) {
  4. consumer.use(new WinstonLogger(getWinstonOptions()));
  5. }
  6. getOptions(): LoggerOptions {
  7. return {
  8. level: 'info',
  9. };
  10. }
  11. }

在上面的代码中,我们创建了一个 WinstonLogger 实例,并传递了 getWinstonOptions() 方法返回的配置选项。getWinstonOptions() 方法将在步骤 3 中定义。
步骤 3:创建日志记录器
接下来,我们需要创建一个日志记录器来记录不同级别的日志信息。在 app.module.ts 文件中,添加以下代码:

  1. import * as winston from 'winston';
  2. import { LoggerOptions, LoggerService } from '@nestjs/common';
  3. export class AppModule implements NestModule {
  4. configure(consumer: LoggerConsumer) {
  5. consumer.use(new WinstonLogger(getWinstonOptions()));
  6. }
  7. getOptions(): LoggerOptions {
  8. return {
  9. level: 'info',
  10. };
  11. }
  12. }
  13. function getWinstonOptions() {
  14. return {
  15. level: 'info', // 设置日志级别为 info,更高级别的日志将会被忽略
  16. format: winston.format.combine(
  17. winston.format.timestamp(), // 时间戳格式化器
  18. winston.format.printf(({ timestamp, level, message }) => `${timestamp} [${level}] ${message}`), // 日志输出格式化器,按照指定格式拼接日志信息并输出到控制台和文件
  19. ),
  20. transports: [
  21. new winston.transports.Console(), // 日志输出到控制台,便于在本地开发时查看日志信息
  22. new winston.transports.File({ filename: 'app.log' }), // 日志输出到文件,方便后期分析和审计日志信息,文件名为 app.log,会保存在项目根目录下
  23. ],
  24. };
  25. }

在上面的代码中,我们定义了一个 getWinstonOptions() 方法来配置 Winston 的日志级别、输出格式和传输方式。这里我们使用了两个传输方式:控制台和文件。你可以根据实际需求添加更多的传输方式,例如发送电子邮件或存储数据库等。