如何在Winston Http Transport上捕获错误

时间:2018-07-24 17:28:20

标签: node.js logging https winston

我正在使用Winston创建一个日志记录框架。基本上使用内置的winston http传输。我的问题是,由于无效的主机/路径/身份验证,在发出http发布请求时,我应该如何捕获任何可能发生的http异常。下面是我的代码结构-

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

const transportOptions = {
  host: 'host',
  port: 'port',
  path: '/',
  auth: '',
};

const myFormat = printf(debug => {
    var msg = {
      timestamp: debug.timestamp,
      label: debug.label,
      level: debug.level,
      message: debug.message,
    };
    return JSON.stringify(msg);
  });

  const logger = createLogger({
    level: 'debug',
    format: combine(label({ label: 'label' }), timestamp(), myFormat),
    transports: [
      new transports.Console(),
      new transports.Http(transportOptions),
    ],
    json: false,
  });

logger.info('Test');

如果我在transportOptions中提供了错误的值,它什么也不做。我希望我的框架通过某种异常,这样我才能知道何时发生任何错误/异常。有人可以给我任何建议吗?

1 个答案:

答案 0 :(得分:0)

根据https://github.com/winstonjs/winston/blob/master/lib/winston/transports/http.js#L57,如果HTTP响应代码不是200,则看起来HTTP传输会发出'warn'事件。只要您的服务器在出现错误时返回非200,那么您可以侦听传输中的'warn'事件并相应地处理错误(引发异常或任何您想要的事件)。这是示例代码(我已经测试过并且可以工作):

// Declare your transport outside the logger definition
const t = new transports.Http(transportOptions);
...
t.on('warn', (e) => console.log('warning! ' + e));
logger.info('Test'); // 'warning! ...'

请注意,如果服务器未给出任何响应,则传输不会报告警告;请参阅第14页的『警告』。我不确定是错误还是功能...:)