捕获错误:getaddrinfo使用winston进行ENOTFOUND

时间:2017-09-22 20:39:51

标签: javascript node.js winston

我一直在使用winston将日志推送到logmatic近一年,本周我不得不将其关闭,因为我发现随机连接错误导致生产服务器崩溃。我把它作为一个暂时的解决方案,但我更喜欢像try / catch这样的东西,我试过但是没有用。

这是我目前的代码:

const Winston = require('winston')
require('winston-logstash')

const transports = []
transports.push(new Winston.transports.Console({
  level: 'debug',
  colorize: true,
  prettyPrint: true
}))

try {
  transports.push(new (Winston.transports.Logstash)({
    level: 'info',
    port: 10514,
    host: 'api.logmatic.asdsadio',
    meta: { logmaticKey: 'Xen03ppdS_Cm24hxbz1_kg' },
    node_name: 'api'
  }))

  const logger = new (Winston.Logger)({
    transports: transports
  })
}
catch (err) {
  console.log(err)
}

module.exports = logger

1 个答案:

答案 0 :(得分:1)

你可以做到

const methods = ['info', 'warn', 'error'];
methods.forEach(method => {
    logger[method] = new Proxy(logger[method], {
        apply: function(target, thisArg, args) {
            try {
                target.call(logger, ...args);
            } catch(error) {
                console.error(error);
            }
        },
    });
});

在初始化记录器之后,您将弄清楚为什么会出现连接错误。至少,它应该防止崩溃。它基本上会拦截每次调用 logger.info logger.warn logger.error 并将它们包装在try catch中。