TypeError: winston.createLogger is not a constructor

TypeError: winston.createLogger is not a constructor

我正在尝试做的事情: 为 Nodejs 应用程序创建一个记录器

代码:

const winston = require('winston');
const fs = require('fs');
const moment = require('moment');

// const envLogger;
const logDir = 'logs/aws';

// Create the log directory if it does not exist
fs.access(logDir, (err) => {
  if (err) {
    fs.mkdir(logDir, ()=>console.log('Log file created'));
  }
});

const timestampFormat = () => {
  return moment().format('YYYY-MM-DD hh:mm:ss');
};

const logger = new winston.createLogger({
  transports: [
    new winston.transports.Console({
      timestamp: timestampFormat,
      colorize: true,
      prettyPrint: true,
      level: 'info',
    }),
  ],
});
console.log('Created logger');
module.exports = logger;

运行 在 Amazon EC2 实例上,出现以下错误:

[2019-01-03T16:38:26.580Z][error][sql]: uncaughtException: winston.createLogger is not a constructor
TypeError: winston.createLogger is not a constructor
    at Object.<anonymous> (/###/common/helper/logger.js:19:16)
    at Module._compile (internal/modules/cjs/loader.js:722:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:733:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
    at Module.require (internal/modules/cjs/loader.js:658:17)
    at Module._compile (internal/modules/cjs/loader.js:722:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:733:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
    at Module.require (internal/modules/cjs/loader.js:658:17)
    at Module._compile (internal/modules/cjs/loader.js:722:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:733:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
    at Module.require (internal/modules/cjs/loader.js:658:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Module._compile (internal/modules/cjs/loader.js:722:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:733:10)
    at Module.load (internal/modules/cjs/loader.js:620:32) 

package.json

上的温斯顿版本
"winston": "^3.0.0-rc1"

根据这些链接,这似乎是版本 3 上 Winston.logger 的一个众所周知的问题 - Node js logging - winston.Logger is not a constructor and

但是我在 v3 上遇到了同样的问题,这不应该发生。该应用程序在我的本地计算机上运行良好,问题仅发生在 EC2 实例 运行 Amazon Linux AMI 2.

本地的 Winston 版本 Mac:

 ├─┬ apidoc@0.17.6
 │ └── winston@2.3.1
 ├─┬ db-migrate@0.10.7
 │ └─┬ prompt@1.0.0
 │   └── winston@2.1.1
 └── winston@3.0.0-rc1

EC2 实例上的 Winston 版本:

├─┬ apidoc@0.17.6
│ └── winston@2.3.1 
├─┬ db-migrate@0.10.7
│ └─┬ prompt@1.0.0
│   └── winston@2.1.1 
└── winston@3.1.0 

我终于通过从 package.json 文件中删除插入符号 (^) 解决了这个问题

编辑package.json这一行
"winston": "^3.0.0-rc1"

"winston": "3.0.0-rc1"

这将确保只安装 v3.0.0。