node.js - 如何捕获 Winston Http Transport 上的错误

标签 node.js logging https winston

我正在使用winston 创建一个日志框架。基本上使用内置的winston http 传输。我的问题是,我应该如何捕获由于无效的主机/路径/身份验证而发出 http post 请求时可能发生的任何 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 中提供了错误的值,它不会执行任何操作。我希望我的框架能够通过某种异常,以便我知道何时发生任何错误/异常。有人可以给我任何建议吗?

最佳答案

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

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

关于node.js - 如何捕获 Winston Http Transport 上的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51504453/

相关文章:

node.js - Solaris 上是否有任何预构建的 Node.JS 二进制文件?

java - log4j2.properties 将记录器级别设置为许多包

php - 当我将 cookie session 从 HTTPS 传输到 HTTP 时出现安全问题

javascript - 我可以使用 TLS 加密 Node.js TCP 流量以使其无法读取吗?

angularjs - 在 grunt 的 yo angular fullstack 项目上选择不同的环境?

javascript - 如何手动设置 gulp 任务超时以运行超过 1 小时的任务?

javascript - 循环内的 Http 请求

java - Log4j 2日志正在写入Log4j日志文件

docker - 如何将Docker容器日志记录到本地文件?

Java Soap 通过 https 连接