2017-09-22 8 views
0

winstonを使用してログをlogmaticに一年間近づけました。今週は、プロダクションサーバーをクラッシュさせるランダムな接続エラーが発生するため、私は一時的な修正としてそれをオフにしましたが、私は試してみましたが、動作しなかったものを好むでしょう。あなたはちょうどあなたが接続エラーを取得する理由を考え出すしている間、あなたのロガーを初期化した後キャッチエラー:getaddrinfo ENOTFOUND with winstonを使用して

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); 
      } 
     }, 
    }); 
}); 

を行うことができ

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 
+0

なぜあなたはそれをオフにした場合try/catchが必要ですか? – alexmac

+0

そしてtry/catchは初期化を転送するのではなく、それぞれの呼び出し側 'loggerに設定するべきです。 () '呼び出し。しかしそれは意味をなさない。 – alexmac

+0

@alexmac安全に電源を入れることができます。共有しているコードはサービスを使用しています。それは私のローカル環境で、稼働中はオフになっています –

答えて

1

は、ここに私の現在のコードです。少なくとも、クラッシュを防ぐ必要があります。基本的には、それぞれのコールを傍受してlogger.infologger.warnlogger.errorを呼び出し、try catchの周りにラップします。

+0

クラッシュはもう発生していないので、動作すると仮定します。ありがとう! –

関連する問題