You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS中winston-daily-rotate-file报错:TypeError: 不是构造函数

问题原因与解决方案

核心原因

winston-daily-rotate-file从v5版本开始,取消了默认导出,改用命名导出。如果仍然使用默认导入的方式(比如import DailyRotateFile from 'winston-daily-rotate-file'),会得到undefined,实例化时自然会抛出TypeError: ...default is not a constructor。

修复步骤

1. 修正导入方式

根据你的模块系统选择正确的导入写法:

  • ES模块(TypeScript/ES6):
import { DailyRotateFile } from 'winston-daily-rotate-file';
  • CommonJS(require):
const { DailyRotateFile } = require('winston-daily-rotate-file');

2. 完整NestJS配置示例

以下是集成winston和日志轮转的完整代码参考:

创建winston配置文件(比如src/winston.logger.ts)

import * as winston from 'winston';
import { DailyRotateFile } from 'winston-daily-rotate-file';

export const winstonLogger = winston.createLogger({
  level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
  format: winston.format.combine(
    winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    winston.format.printf(({ timestamp, level, message }) => {
      return `${timestamp} [${level.toUpperCase()}]: ${message}`;
    })
  ),
  transports: [
    // 控制台输出
    new winston.transports.Console(),
    // 每日轮转文件
    new DailyRotateFile({
      filename: 'logs/app-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      zippedArchive: true, // 压缩旧日志
      maxSize: '10m', // 单文件最大10MB
      maxFiles: '7d' // 保留7天日志
    })
  ]
});

在main.ts中使用自定义日志

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { winstonLogger } from './winston.logger';

async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    logger: winstonLogger
  });
  await app.listen(3000);
}
bootstrap();

3. 确认依赖版本兼容性

检查package.json中的依赖版本,确保:

  • winston版本为^3.12.0
  • winston-daily-rotate-file版本为^5.0.0
    这两个版本是官方兼容的组合,无需降级。

内容的提问来源于stack exchange,提问作者Ohs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:10:02