Nestjs框架: 可集成在Nestjs上的日志模块pino和winston的使用

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

日志模块 pino

  • npmjs.com/package/pino

  • getpino.io

  • 安装:$ npm i nestjs-pino

  • 注册:

    import {
         
          LoggerModule, Logger } from 'nestjs-pino'
    
    @Module({
         
         
      controllers: [AppController],
      imports: [LoggerModule.forRoot()] // 注意这里
    })
    
  • 在控制器中测试使用

    import {
         
          Logger } from 'nestjs-pino'
    
    @Controller('user')
    export class UserController {
         
         
      private logger = Logger
      constructor() {
         
         
        this.logger.log('init') // 类似这样,在需要的地方调用
      }
    }
    
    • 这样写,在访问这个控制器的时候,会打印两次,因为不需要手动调用,所以
    • 需要删除这个 this.logger.log('init') 调用,因为这个是没有必要的
    • 所以 pino 是一个比较适合懒人的库
    • 它会默认打印日志,但是目前看来,日志输出不友好(不好阅读)

友好化 pino 方案

  • $ npm i pino-pretty pino-roll

  • 在 user.module.ts 中

    import {
         
          LoggerModule } from 'nestjs-pino'
    const isDev = process.env.NODE_ENV === 'development'
    @Module({
         
         
      imports: [LoggerModule.forRoot({
         
         
        pinoHttp: {
         
         
          transport: isDev ? {
         
         
            target: 'pino-pretty',
            level: 'info',
            options: {
         
         
              colorize: true
            }
          } : {
         
         
            target: 'pino-roll',
            level: 'info',
            options: {
         
         
              file: path.join('log', 'log.txt'), // 文件名称可以用时间
              frequency: 'daily', // hourly
              size: '10m', // 只要超过这个,就会多生成一个文件
              mkdir: true
            }
          }
        }
      })]
    })
    
  • 这里开发环境和生产环境用的不同的pino插件

  • pino是一个开箱即用,稍稍配置就可以使用的日志插件

  • 注意,还有一个 targets 的用法,比较好,可以参考:

    pinoHttp: {
         
         
      transport: {
         
         
        targets: [
          {
         
         
            level: 'info',
            target: 'pino-pretty',
            options: {
         
         
              colorize: true
            }
          },
          {
         
         
            target: 'pino-roll',
            level: 'info',
            options: {
         
         
              file: path.join('log', 'log.txt'), // 文件名称可以用时间
              frequency: 'daily', // hourly
              size: '10m', // 只要超过这个,就会多生成一个文件 0.1k
              mkdir: true
            }
          }
        ]
      }
    }
    
  • 或

    pinoHttp: {
         
         
      transport: {
         
         
        targets: [
          isDev ?
          {
         
         
            level: 'info',
            target: 'pino-pretty',
            options: {
         
         
              colorize: true
            }
          }:
          {
         
         
            target: 'pino-roll',
            level: 'info',
            options: {
         
         
              file: path.join('log'
第二十三章 Nest集成日志框架Winston Winston是一个非常流行的Node.js日志框架,而Nest.js是一个基于Node.js的后端框架。修改 winston.module.ts 内容如下 添加 forRoot 方法,接收 winston 的 createLogger 方法的参数,返回动态模块的 providers、exports。这里用到了 printf 的 format 函数,它可以自定义打印的日志格式 且使用了chalk 加上了颜色,并且打印了 dayjs 格式化的时间。可以看到控制台打印了自定义的 logger 的自定义。 阅读详情

相关推荐

NestJS日志模块终极对决:Pino vs Winston实战配置与性能对比

本文深入对比了NestJS中Pino与Winston两大日志模块的核心特性、性能表现及生产环境配置方案。通过真实压测数据揭示Pino在吞吐量上的优势(达Winston的3-5倍),同时解析Winston在企业级定制化场景的不可替代性,并提供Serverless、分布式追踪等实战技巧,帮助开发者根据业务需求做出技术选型决策。

weixin_33737134的博客 171

Nestjs日志模块深度对比:pino与winston的实战配置与性能优化

本文深度对比了Nestjs项目中两大主流日志库Pino与Winston的实战配置与性能优化。Pino以极致性能著称,适合高并发场景;Winston功能丰富灵活,可高度定制。文章提供了从集成、配置到生产环境最佳实践的完整指南,并分享了性能测试数据与选择依据,帮助开发者构建高效、可观测的日志系统。

weixin_29273849的博客 582

NestJS日志模块终极对决:Pino vs Winston性能实测与选型指南(2024版)

本文深入对比了NestJS中Pino与Winston日志模块在2024年的性能表现与适用场景。通过真实压力测试数据,揭示Pino在高并发下的吞吐量优势(较Winston提升102%)及内存管理效率,同时提供生产环境配置模板与典型场景选型指南,帮助开发者根据性能需求、扩展能力等维度做出科学决策。

weixin_30576827的博客 371

NestJS模块化架构与依赖注入实战指南

模块化架构是现代软件开发的核心设计模式,通过将系统拆分为高内聚、低耦合的功能单元,显著提升代码的可维护性和可扩展性。NestJS作为渐进式Node.js框架,创新性地将前端领域成熟的装饰器语法和依赖注入(DI)模式引入后端开发,大幅降低了全栈开发的学习曲线。其模块系统支持显式声明依赖关系,配合TypeScript的强类型特性,为构建企业级应用提供了坚实基础。在实际工程实践中,这种架构特别适合电商平台、SaaS系统等复杂业务场景,能有效管理随着业务增长带来的复杂度。通过合理运用NestJS的模块化设计和DI容

weixin_33670713的博客 468

nestjs-pino:基于Pino的NestJS平台无关记录器,每条记录均带有REQUEST上下文

NestJS-Pino :sparkles: :sparkles: :sparkles: 基于Pino的NestJS平台无关记录器,每条记录均带有REQUEST上下文 :sparkles: :sparkles: :sparkles: 例子 使用LoggerModule.forRoot(...)或LoggerModule.forRootAsync(...)导入模块: import { LoggerModule } from "nestjs-pino" ; @ Module ( { imports : [ LoggerModule . forRoot ( ) ] , controllers : [ AppController ] , providers : [ MyService ] } ) class MyModule { } 在控制器让我们使用Logger -用一样的API类: import { Logger } from "nestjs-pino" ; @ Cont

nest-winston:Nest模块包装器形式的Winston记录器

用于记录器的模块包装器。 安装 npm install --save nest-winston winston 在配置nest-winston遇到麻烦吗? 克隆此存储库和cd中的示例: cd sample/quick-start npm install npm run start:dev 快速开始 将WinstonModule导入到根AppModule并使用forRoot()方法对其进行配置。 此方法接受与winston包中的函数相同的选项对象: import { Module } from '@nestjs/common' ; import { WinstonModule } from 'nest-winston' ; import * as winston from 'winston' ; @ Module ( { imports : [ WinstonModule

告别代码移植烦恼:STM32CubeMX 6.4.0 + STM32F407ZGT6 + YT8512C PHY芯片的LWIP网络配置全攻略

本文详细介绍了如何使用STM32CubeMX 6.4.0配置STM32F407ZGT6与YT8512C PHY芯片的LWIP网络适配,包括硬件特性解析、STM32CubeMX基础配置、专用驱动适配和LWIP协议栈定制化配置,帮助开发者解决PHY芯片差异导致的网络问题。

weixin_28718793的博客 292

CAN(2)-GD32

GD32中CAN的特征。

小柚子的博客 554

零基础入门Simulink——基于Simulink的MIMO-OFDM系统仿真建模示例

MIMO概述MIMO技术利用多个天线进行信号发送和接收,通过空间复用来提高数据传输速率,或通过空间分集来增强信号的可靠性。OFDM概述OFDM是一种将高速率数据流分成多个低速数据流并行传输的技术,每个子载波都采用调制方式(如BPSK、QPSK),并通过IFFT/FFT变换实现串并转换。MIMO-OFDM优势结合了MIMO的空间分集增益与OFDM对抗多径效应的能力,适用于宽带无线通信系统。提供了更高的数据速率和更好的频谱效率,是现代无线通信标准(如4G LTE、5G NR等)的核心技术之一。

amy_mhd的博客 891

【目录】专栏文章导航

从最强工具链Davinci Configurator模块学习出发掌握AUTOSAR

weixin_47571898的博客 3302

Vue3 - vite 项目报错:Uncaught ReferenceError: require is not defined(解决 vue3 vite 项目无法识别 require 语法导致报错)

vue3,vite,报错解决,vue3+vite报错requireisnotdefined,vue3vite引插件不识别require,老插件必须用require怎么办,vite项目插件要求使用require引入但报错,vue3不兼容require导致第三方包插件无法使用,vue3vite中使用require报错怎么办,解决Vite+vue3使用第三方依赖报错“requireisnotdefined”问题,vite项目require语法兼容问题解决requireisnotdefine

🏆 前端领域优质创作者 2万+

【嵌入式DIY实例ESP32篇】-步数计数器

在本项目中,我们将使用 ESP32 微控制器和博世的 BMI160 加速度计陀螺仪模块构建一款便携式计步器

视觉与物联智能 803

YOLOv8人工智能与深度学习——强化学习

本文介绍了将YOLOv8目标检测模型与强化学习结合的方法。主要应用包括自适应目标检测(动态调整检测参数)、主动学习(智能选择标注样本)和多目标跟踪优化。实现方案采用深度Q网络策略,通过定义状态表示、动作空间和奖励函数,使检测系统能根据环境反馈优化性能。该方法具有自适应优化、资源高效、持续改进等优势,能构建更智能的计算机视觉系统。文章详细说明了强化学习环境的构建、策略网络的实现以及训练过程,并提供了代码示例。

u010117029的博客 260

A-Frame引擎开发:A-Frame基础入门_(11).A-Frame物理引擎集成

在上一节中,我们学习了如何在A-Frame中创建基本的3D场景和交互元素。然而,为了使虚拟现实游戏更具真实感和互动性,物理引擎的集成是必不可少的。物理引擎可以模拟现实世界中的物理行为,如重力、碰撞、摩擦等,从而增强用户的沉浸感。物理引擎在虚拟现实游戏中的重要性不言而喻。它不仅能够模拟物体的运动和相互作用,还能为游戏提供更真实的反馈和体验。例如,当玩家在虚拟世界中推动一个物体时,物理引擎可以确保物体按照预期的方式移动,而不是简单地穿墙而过或突然消失。重力是物理引擎中最基本的特性之一。在A-Frame中,我们可

chenlz2007的博客 797

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: Nestjs框架: 日志和官方日志
下一篇: 前端架构: 脚手架命令行交互核心实现之inquirer和readline的应用教程
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值