如何在Nestjs中配置Winston并添加AWS Cloudwatch日志传输器
NestJS 集成 winston-cloudwatch 操作方法
步骤1:安装依赖
- 安装核心依赖包:
npm install winston-cloudwatch - TypeScript 项目需额外安装类型定义:
npm install -D @types/winston-cloudwatch
步骤2:修改loggerConfig配置新增传输器
你不需要调整app.module.ts中已有的WinstonModule引入逻辑,只需要在你现有的loggerConfig配置的transports数组中,新增winston-cloudwatch实例即可,参考配置如下:
import * as WinstonCloudWatch from 'winston-cloudwatch'; import { WinstonModuleOptions } from 'nest-winston'; import * as winston from 'winston'; export const loggerConfig: WinstonModuleOptions = { // 保留你原有配置的level、format等基础参数 level: process.env.NODE_ENV === 'production' ? 'info' : 'debug', format: winston.format.combine( winston.format.timestamp(), winston.format.json() ), transports: [ // 保留你原有配置的其他传输器,比如控制台输出等 new winston.transports.Console(), // 新增CloudWatch传输器 new WinstonCloudWatch({ logGroupName: '替换为你的日志组名称', logStreamName: '替换为你的日志流名称', awsRegion: process.env.AWS_REGION || 'cn-north-1', // 若部署环境使用IAM角色授权,可省略以下两个密钥参数,SDK会自动读取实例绑定的凭证 awsAccessKeyId: process.env.AWS_ACCESS_KEY_ID, awsSecretKey: process.env.AWS_SECRET_ACCESS_KEY, // 可选扩展配置 jsonMessage: true, // 自动将日志格式转为JSON uploadRate: 2000, // 日志批量上报间隔,单位毫秒 }) ] };
可选:运行时动态添加传输器
如果你的场景需要在应用启动后按需动态添加CloudWatch传输器,可以直接注入Nest的Logger实例调用add方法:
import { Injectable, Logger } from '@nestjs/common'; import * as WinstonCloudWatch from 'winston-cloudwatch'; @Injectable() export class LogService { constructor(private readonly logger: Logger) { // 比如仅生产环境开启CloudWatch上报 if (process.env.NODE_ENV === 'production') { this.logger.add(new WinstonCloudWatch({ // 配置参数同上 })) } } }
注意事项
- 确保使用的AWS凭证对应账号具备
logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEvents权限 - 开发环境可注释掉CloudWatch传输器,避免不必要的日志上报产生额外费用
内容的提问来源于stack exchange,提问作者zedian
相关产品推荐
相关产品推荐

