Node.js winston未知记录器级别:未定义

Node.js winston未知记录器级别:未定义,node.js,express,logging,winston,Node.js,Express,Logging,Winston,我使用winston记录错误,在生产过程中记录到文件,在开发过程中记录到控制台。我还设置了其他日志传输,即向slack发送错误的自定义传输 下面是我的logger.js const expressWinston = require('express-winston'); const { createLogger, format, transports } = require('winston'); const SlackAPIAccessDevTransport = require('./win

我使用
winston
记录错误,在生产过程中记录到文件,在开发过程中记录到
控制台
。我还设置了其他日志传输,即向slack发送错误的自定义传输

下面是我的
logger.js

const expressWinston = require('express-winston');
const { createLogger, format, transports } = require('winston');
const SlackAPIAccessDevTransport = require('./winston-slack');

const accessLogger = expressWinston.logger({
  transports: [
    new SlackAPIAccessDevTransport(),
  ],
  format: format.combine(
    format.colorize(),
    format.json(),
  ),
});

const logToFile = createLogger({
  transports: [
    new transports.File({
      json: true,
      maxFiles: 5,
      level: 'error',
      colorize: false,
      filename: 'logs/error.log',
      maxsize: 5242880, // 5MB
    }),
  ],
});

const logToConsole = createLogger({
  level: 'info',
  transports: [
    new transports.Console({
      format: format.combine(
        format.colorize(),
        format.simple(),
      ),
    }),
  ],
});
module.exports = {
  logToFile,
  logToConsole,
  accessLogger,
};
登录到文件工作正常,但对于
控制台
传输,我得到的
级别未定义

这是我的错误

const Logger = require('../utils/logger');

module.exports = async (err, req, res, next) => {
  // log any kind of error
  console.log(err);
  const errorData = {
    date: new Date().toISOString(),
    env: process.env.NODE_ENV,
    level: 'error',
    name: err.name,
    message: err.message,
    api: req.url,
    method: req.method,
    stack: err.stack,
    body: req.body,
    client: req.connection.remoteAddress,
  };
  if (process.env.NODE_ENV === 'production') {
    Logger.logToFile.log(errorData);
  } else {
    Logger.logToConsole.log(err);
  }
return res.status(500).send('Something went wrong!');
}
你需要使用

errors
格式允许您将JavaScript错误的实例直接传递给记录器。它允许您指定是否包含堆栈跟踪

此外,最好为
error
日志添加自定义格式

例如

结果:

2021-01-22T06:46:07.088Z error: Error: network
    at Object.<anonymous> (/Users/ldu020/workspace/github.com/mrdulin/expressjs-research/src/stackoverflow/65822479/index.ts:19:13)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Module.m._compile (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/index.ts:530:23)
    at Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Object.require.extensions.<computed> [as .ts] (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/index.ts:533:12)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at main (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/bin.ts:212:14)
    at Object.<anonymous> (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/bin.ts:470:3)
2021-01-22T06:46:07.089Z error: Error: network
    at Object.<anonymous> (/Users/ldu020/workspace/github.com/mrdulin/expressjs-research/src/stackoverflow/65822479/index.ts:19:13)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Module.m._compile (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/index.ts:530:23)
    at Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Object.require.extensions.<computed> [as .ts] (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/index.ts:533:12)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at main (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/bin.ts:212:14)
    at Object.<anonymous> (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/bin.ts:470:3)
2021-01-22T06:46:07.088Z错误:错误:网络
反对。(/Users/ldu020/workspace/github.com/mrdulin/expressjs research/src/stackoverflow/65822479/index.ts:19:13)
at模块编译(内部/modules/cjs/loader.js:1158:30)
在Module.m._compile(/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/index.ts:530:23)
at Module._extensions..js(internal/modules/cjs/loader.js:1178:10)
在Object.require.extensions。[as.ts](/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/index.ts:533:12)
at Module.load(内部/modules/cjs/loader.js:1002:32)
at Function.Module._load(内部/modules/cjs/loader.js:901:14)
在Function.executeUserEntryPoint[作为runMain](internal/modules/run_main.js:74:12)
主要(/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/bin.ts:212:14)
反对。(/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/bin.ts:470:3)
2021-01-22T06:46:07.089Z错误:错误:网络
反对。(/Users/ldu020/workspace/github.com/mrdulin/expressjs research/src/stackoverflow/65822479/index.ts:19:13)
at模块编译(内部/modules/cjs/loader.js:1158:30)
在Module.m._compile(/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/index.ts:530:23)
at Module._extensions..js(internal/modules/cjs/loader.js:1178:10)
在Object.require.extensions。[as.ts](/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/index.ts:533:12)
at Module.load(内部/modules/cjs/loader.js:1002:32)
at Function.Module._load(内部/modules/cjs/loader.js:901:14)
在Function.executeUserEntryPoint[作为runMain](internal/modules/run_main.js:74:12)
主要(/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/bin.ts:212:14)
反对。(/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/bin.ts:470:3)
您需要使用

errors
格式允许您将JavaScript错误的实例直接传递给记录器。它允许您指定是否包含堆栈跟踪

此外,最好为
error
日志添加自定义格式

例如

结果:

2021-01-22T06:46:07.088Z error: Error: network
    at Object.<anonymous> (/Users/ldu020/workspace/github.com/mrdulin/expressjs-research/src/stackoverflow/65822479/index.ts:19:13)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Module.m._compile (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/index.ts:530:23)
    at Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Object.require.extensions.<computed> [as .ts] (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/index.ts:533:12)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at main (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/bin.ts:212:14)
    at Object.<anonymous> (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/bin.ts:470:3)
2021-01-22T06:46:07.089Z error: Error: network
    at Object.<anonymous> (/Users/ldu020/workspace/github.com/mrdulin/expressjs-research/src/stackoverflow/65822479/index.ts:19:13)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Module.m._compile (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/index.ts:530:23)
    at Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Object.require.extensions.<computed> [as .ts] (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/index.ts:533:12)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at main (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/bin.ts:212:14)
    at Object.<anonymous> (/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts-node/src/bin.ts:470:3)
2021-01-22T06:46:07.088Z错误:错误:网络
反对。(/Users/ldu020/workspace/github.com/mrdulin/expressjs research/src/stackoverflow/65822479/index.ts:19:13)
at模块编译(内部/modules/cjs/loader.js:1158:30)
在Module.m._compile(/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/index.ts:530:23)
at Module._extensions..js(internal/modules/cjs/loader.js:1178:10)
在Object.require.extensions。[as.ts](/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/index.ts:533:12)
at Module.load(内部/modules/cjs/loader.js:1002:32)
at Function.Module._load(内部/modules/cjs/loader.js:901:14)
在Function.executeUserEntryPoint[作为runMain](internal/modules/run_main.js:74:12)
主要(/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/bin.ts:212:14)
反对。(/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/bin.ts:470:3)
2021-01-22T06:46:07.089Z错误:错误:网络
反对。(/Users/ldu020/workspace/github.com/mrdulin/expressjs research/src/stackoverflow/65822479/index.ts:19:13)
at模块编译(内部/modules/cjs/loader.js:1158:30)
在Module.m._compile(/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/index.ts:530:23)
at Module._extensions..js(internal/modules/cjs/loader.js:1178:10)
在Object.require.extensions。[as.ts](/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/index.ts:533:12)
at Module.load(内部/modules/cjs/loader.js:1002:32)
at Function.Module._load(内部/modules/cjs/loader.js:901:14)
在Function.executeUserEntryPoint[作为runMain](internal/modules/run_main.js:74:12)
主要(/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/bin.ts:212:14)
反对。(/Users/ldu020/workspace/github.com/mrdulin/mongoose5.x-lab/node_modules/ts node/src/bin.ts:470:3)

我仍然获得
[winston]未知记录器级别:未定义的
,但是如果我将
错误数据
传递给控制台记录器,它将工作
logToConsole.log(errorData)
但传递
错误
抛出未定义的记录器级别,我仍然获得
[winston]未知记录器级别:未定义的
,但是,如果我将
errorData
传递给控制台记录器,它将工作
logToConsole.log(errorData)
但传递
err
会抛出未定义的记录器级别