当前位置: 首页 > wzjs >正文

网站建设飠金手指下拉手工制作小店铺

网站建设飠金手指下拉,手工制作小店铺,dedecms 做电商网站,潍坊网络营销公司有哪些文章目录 前言✅ 一、统一异常处理 ExceptionFilter核心目标:🚀 标准实现结构:common/filters/http-exception.filter.ts注册为全局过滤器: ✅ 二、日志追踪 LoggerMiddleware TraceId目的:实现步骤:commo…

文章目录

  • 前言
    • ✅ 一、统一异常处理 ExceptionFilter
      • 核心目标:
      • 🚀 标准实现结构:
        • `common/filters/http-exception.filter.ts`
        • 注册为全局过滤器:
    • ✅ 二、日志追踪 LoggerMiddleware + TraceId
      • 目的:
      • 实现步骤:
        • `common/middleware/logger.middleware.ts`
        • 使用中间件:
      • 如何在服务/拦截器中访问 traceId?
    • ✅ 三、标准响应结构示例
    • 🧠 总结:落地关键点
  • `Winston` 和 `Pino`
    • ✅ 快速结论:
    • 📊 Winston 优势(适合大部分企业项目)
      • 示例集成:
    • ⚡ Pino 优势(极致性能 + Cloud Native)
      • 示例:
    • 🧠 推荐策略(大厂项目实战):
    • 🔚 总结


前言

我们来系统性分析 NestJS 统一异常处理 + 日志追踪链路设计


✅ 一、统一异常处理 ExceptionFilter

核心目标:

  • 所有异常结构统一返回格式 { code, msg, data }
  • 错误信息脱敏处理(不泄露 stack trace 给前端)
  • 含有 traceId,便于日志串联、故障排查
  • 支持国际化、错误码映射表

🚀 标准实现结构:

common/filters/http-exception.filter.ts
import {ArgumentsHost,Catch,ExceptionFilter,HttpException,HttpStatus,
} from '@nestjs/common';
import { Request, Response } from 'express';@Catch()
export class AllExceptionsFilter implements ExceptionFilter {catch(exception: unknown, host: ArgumentsHost) {const ctx = host.switchToHttp();const response = ctx.getResponse<Response>();const request = ctx.getRequest<Request>();const traceId = request.headers['x-trace-id'] || ''; // 日志链路追踪用let code = -1;let msg = 'Internal server error';let status = HttpStatus.INTERNAL_SERVER_ERROR;if (exception instanceof HttpException) {status = exception.getStatus();const res = exception.getResponse();if (typeof res === 'string') {msg = res;} else if (typeof res === 'object') {msg = (res as any).message || msg;code = (res as any).code || status;}}response.status(status).json({code,msg,data: null,traceId,});}
}
注册为全局过滤器:
// main.ts
app.useGlobalFilters(new AllExceptionsFilter());

✅ 二、日志追踪 LoggerMiddleware + TraceId

目的:

  • 自动注入 traceId,贯穿中间件 → 控制器 →服务 → 日志输出
  • 每个请求唯一标识
  • 支持链路追踪系统(如 ELK、SkyWalking、Jaeger)
  • skywalking
  • ELK
    在这里插入图片描述

实现步骤:

common/middleware/logger.middleware.ts
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
import { v4 as uuid } from 'uuid';@Injectable()
export class LoggerMiddleware implements NestMiddleware {use(req: Request, res: Response, next: NextFunction) {const traceId = req.headers['x-trace-id'] || uuid();req.headers['x-trace-id'] = traceId;(req as any).traceId = traceId;console.log(`[Request] ${traceId} ${req.method} ${req.originalUrl}`);res.on('finish', () => {console.log(`[Response] ${traceId} ${res.statusCode}`);});next();}
}
使用中间件:
// app.module.ts
export class AppModule implements NestModule {configure(consumer: MiddlewareConsumer) {consumer.apply(LoggerMiddleware).forRoutes('*');}
}

如何在服务/拦截器中访问 traceId?

// controller / service
@Get()
handle(@Req() req: Request) {const traceId = (req as any).traceId;
}

✅ 三、标准响应结构示例

{"code": 404,"msg": "Resource not found","data": null,"traceId": "c84e9e6b-2df0-4e83-87d2-0db7cc319bd4"
}

🧠 总结:落地关键点

目标实现
❗ 异常统一结构全局 @Catch() Filter + HttpException 规范
🔗 Trace ID中间件生成 UUID,挂载 req.headers / req.traceId
🧾 日志打点在 controller / service / errorFilter / middleware 处打印
📘 错误码管理code => message 映射表,推荐配置表 + i18n
🔍 安全性不暴露栈信息、脱敏字段过滤

WinstonPino

在 NestJS 项目中, WinstonPino 之间二选一,以下是从实战角度对比推荐:


✅ 快速结论:

需求类型推荐选项理由
🚀 极致性能(百万级日志)Pino性能极高,写入速度领先
📦 功能丰富 + 插件生态Winston插件多,生态成熟,结构更灵活
🧩 与 NestJS 生态融合Winston 更主流(但 Pino 也支持)
📊 日志格式自定义Winston 更直观
🧪 开发中调试体验Winston 可读性好、格式清晰

📊 Winston 优势(适合大部分企业项目)

  • ✅ 成熟稳定、社区庞大
  • ✅ 支持多个 transport(console/file/http/syslog)
  • ✅ 配置灵活,适合嵌入 traceIduserId
  • ✅ Nest 官方文档示例使用 Winston(默认推荐)

示例集成:

pnpm add winston nest-winston
// main.ts
import { WinstonModule } from 'nest-winston';
import * as winston from 'winston';const app = await NestFactory.create(AppModule, {logger: WinstonModule.createLogger({transports: [new winston.transports.Console({format: winston.format.combine(winston.format.timestamp(),winston.format.simple()),}),],}),
});

⚡ Pino 优势(极致性能 + Cloud Native)

  • 🚀 极快(是 Winston 的 5~10 倍写入速度)
  • ✅ 默认结构化 JSON 输出,适合对接 ELK、Datadog、Grafana Loki 等
  • ✅ 支持异步写入、流式传输
  • ❗ 但:Nest 中整合复杂度略高,需要 nestjs-pino 支持

示例:

pnpm add pino pino-pretty nestjs-pino
import { LoggerModule } from 'nestjs-pino';@Module({imports: [LoggerModule.forRoot({pinoHttp: {transport: {target: 'pino-pretty',options: { colorize: true },},},}),],
})

🧠 推荐策略(大厂项目实战):

场景推荐使用
🚀 API 网关、高并发日志收集Pino
🧾 通用后管系统、业务系统Winston
🌐 多语言服务,统一日志格式Pino(配合 JSON 格式日志)
🧪 本地开发调试优先Winston

🔚 总结

对比项WinstonPino
性能⭐⭐⭐⭐⭐⭐⭐⭐(超快)
格式配置灵活(支持组合 Format)JSON + 简洁配置
插件生态丰富(file, http, syslog 等)偏轻量(适合定向场景)
Nest 集成默认推荐 nest-winston需引入 nestjs-pino
上手体验非常易用更偏 Cloud Native / DevOps 场景

🔧 如果你已经在用 traceId + Filter + Middleware 架构,我推荐:

✅ 用 Winston 做日志收集 + 多 transport 输出(控制台 + 文件 + Graylog)

若未来要对接 Prometheus、ELK、Datadog、Loki,那可以再考虑引入 Pino


文章转载自:

http://MiaBTFUK.cLbsd.cn
http://YWdr8oci.cLbsd.cn
http://IbDKtBpr.cLbsd.cn
http://h6QYS6Yi.cLbsd.cn
http://EvAJwFoX.cLbsd.cn
http://etNllaIM.cLbsd.cn
http://L9lQhHgb.cLbsd.cn
http://VmDTWBgn.cLbsd.cn
http://H47fKPXX.cLbsd.cn
http://buf0DVtJ.cLbsd.cn
http://9GYARhJG.cLbsd.cn
http://gS0QRDhv.cLbsd.cn
http://VztmNRg4.cLbsd.cn
http://EnNsYKM5.cLbsd.cn
http://UGP2FQwO.cLbsd.cn
http://VXH7ankK.cLbsd.cn
http://39CI3ijx.cLbsd.cn
http://GwHGziKr.cLbsd.cn
http://gA8cIXJx.cLbsd.cn
http://Undq4SyV.cLbsd.cn
http://ML5fV9Rt.cLbsd.cn
http://a86krF0N.cLbsd.cn
http://uZQfNJ6V.cLbsd.cn
http://UPXUW87G.cLbsd.cn
http://0wuCceJR.cLbsd.cn
http://uhdf8KJv.cLbsd.cn
http://wwsNi0n0.cLbsd.cn
http://db7xAcTq.cLbsd.cn
http://mVKPhAT4.cLbsd.cn
http://FFCXPL2T.cLbsd.cn
http://www.dtcms.com/wzjs/645438.html

相关文章:

  • 个人网站广告投放wordpress主题模板仿
  • 天津网站优化公司哪家专业做网站满屏的照片尺寸是多少
  • 北京网络网站建设价格济南市莱芜区招聘信息
  • 公司网站网络营销是什么怎么做推广和宣传平台
  • 做模板网站价格同济建筑人才网
  • 企业网站目的wordpress好用的主题
  • 汕头专业网站建设公司网站建设网络推广公司
  • 哪个网站做团购要求低点搜索网站定制公司
  • 自已如何做网站自己做的手工在哪个网站卖会更好
  • 网站建设行业分析做网站公司郑州郑州的网站建设公司哪家好
  • 网站服务器和网站备案吗做商城网站哪个好
  • 网站首页优化公司自己注册公司多少钱
  • 网站备案查询接口个人简历ppt模板
  • 电影网站建设的意义外贸流程及详细步骤
  • 成品源码1688网站免费重庆忠县网站建设公司哪家好
  • 网络公司推广方案镇江网站优化公司工作室
  • 网站建设背景需要写些什么国外室内设计专业大学排名
  • 在上海做兼职在哪个网站好施工企业有没有制造费用
  • 移动网站网上营业厅济南网站忧化
  • 哪个网站做推销产品营销自己的网站
  • 邯郸旅游wordpress解析优化
  • logo设计网站在线淮安网站网站建设
  • 想做一个电影网站该怎么做品牌建设的十六个步骤
  • 企业信息化建设网站百度提交入口网址
  • 网站开发vs设计报告地方旅游网站模板
  • 平面设计公司广告语seo爱站网
  • 网站安全检测发生告警后个性化营销
  • 网站建设 苏州asp网站生成
  • 建设壁纸网站的目的注册网站可以注销嘛
  • 网站网页设计如何选wordpress商业插件