【问题标题】:How to catch errors on Winston Http Transport如何在 Winston Http Transport 上捕获错误
【发布时间】:2018-09-01 02:27:43
【问题描述】:

我正在使用 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 中提供了错误的值,它什么也不做。我希望我的框架通过某种异常,以便我知道何时发生任何错误/异常。谁能给我一些建议?

【问题讨论】:

    标签: node.js logging https winston


    【解决方案1】:

    根据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! ...'
    

    请注意,如果服务器没有响应,则传输不会报告警告;我不确定这是错误还是功能... :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 2012-01-29
      • 2013-03-15
      • 1970-01-01
      • 2017-01-30
      • 2011-03-12
      • 2017-06-04
      相关资源
      最近更新 更多