首页 > 解决方案 > Winston - 显示错误堆栈跟踪对象和正常格式的消息

问题描述

我有以下记录器文件-

const { createLogger, format, transports } = require('winston');
const { combine, prettyPrint, timestamp, printf, simple } = format;

// set default log level.
const logLevel = 'info';

const errorStackFormat = format((info) => {
  if (info instanceof Error) {
    return Object.assign({}, info, {
      stack: info.stack,
      message: info.message
    });
  }
  return info;
});

var logger = createLogger({
  level: logLevel,
  levels: {
    error: 0,
    warn: 1,
    info: 2,
    http: 3,
    verbose: 4,
    debug: 5,
    silly: 6
  },
  format: combine(
    prettyPrint(),
    timestamp({
      format: 'DD-MM-YYYY hh:mm:ss A'
    }),
    errorStackFormat(),
    simple(),
    printf((info) => {
      return `${info.timestamp} - ${info.level}: ${info.message}`;
    })
  ),
  transports: [new transports.Console()]
});

module.exports = logger;

如果我传递这样的正常消息 - logger.info('Normal message'),我得到的输出为14-10-2020 12:58:01 AM - info: Normal message,但如果我尝试传递这样的错误对象 - logger.info(new Error('error')) ,我得到的输出为14-10-2020 01:02:23 AM - info: error。如果我在该方法中放置了一个控制台日志,那么errorStackFormat我在该方法中得到了正确stack trace object的结果,那么为什么它没有得到控制台呢?如果我将simple()调用移到下面printf,那么我会正确获得堆栈跟踪。printf如果出现非错误和堆栈跟踪消息,如果出现错误,我应该进行哪些更改才能获取正常格式的消息?

标签: javascriptnode.jsexpressloggingwinston

解决方案


推荐阅读