如何用nestjs-pino实现日志文件轮转功能?
使用nestjs-pino实现日志文件轮转功能
要在nestjs-pino中实现类似winston-daily-rotate-file的日志轮转,无需依赖系统级的logrotate,直接用Pino生态的专用包就能搞定,下面是两种可靠的方案:
方案一:使用官方@pinojs/file-transport(推荐)
这是Pino官方维护的文件传输工具,原生支持日志轮转,稳定性更好。
- 安装依赖
npm install @pinojs/file-transport # 或用yarn yarn add @pinojs/file-transport # 或pnpm pnpm add @pinojs/file-transport
- 配置NestJS日志模块
在app.module.ts中配置LoggerModule,传入轮转相关参数:
import { Module } from '@nestjs/common'; import { LoggerModule } from 'nestjs-pino'; import { fileTransport } from '@pinojs/file-transport'; @Module({ imports: [ LoggerModule.forRoot({ transport: fileTransport({ options: { destination: './logs/app.log', // 基础日志文件路径 mkdir: true, // 自动创建不存在的日志目录 rotate: { enabled: true, interval: 'daily', // 按天轮转,可选hourly/weekly等 maxSize: '10m', // 单个日志文件最大10MB,超出即轮转 maxFiles: '7d', // 保留最近7天的日志 filename: './logs/app-%DATE%.log', // 轮转后的文件名格式,%DATE%会替换为日期(如2024-05-20) }, }, }), }), ], }) export class AppModule {}
方案二:使用pino-rotate第三方包
如果偏好更轻量的实现,可以用社区维护的pino-rotate包:
- 安装依赖
npm install pino-rotate # 或yarn add pino-rotate
- 配置日志模块
import { Module } from '@nestjs/common'; import { LoggerModule } from 'nestjs-pino'; @Module({ imports: [ LoggerModule.forRoot({ transport: { target: 'pino-rotate', options: { filename: './logs/app.log', frequency: 'daily', // 每天轮转一次 maxSize: '10m', // 单个文件上限10MB maxFiles: 7, // 保留最多7个轮转文件 mkdir: true, }, }, }), ], }) export class AppModule {}
注意事项
- 确保应用对日志目录有读写权限,
mkdir: true会自动创建目录,避免启动报错 - 可以根据业务需求调整
interval/frequency、maxSize、maxFiles等参数,比如按小时轮转或保留更多历史日志
内容的提问来源于stack exchange,提问作者Gihoon Eom
相关产品推荐
相关产品推荐

