2014-10-07 32 views
0

我使用溫斯頓溫斯頓 - elasticsearch登錄搜索彈性。我沒有問題設置運輸,一切正常工作。溫斯頓記錄 - 恢復交通,如果其他傳輸失敗

無論如何,如果ES服務器成爲不可達,在停機時間發送日誌似乎永遠失去了。

有沒有辦法告訴溫斯頓登錄文件時(且僅當)的彈性搜索運輸不成?

回答

2

我也試圖處理這種情況下(即當傳輸失敗時記錄的消息(在我的情況下,文件記錄器,它可以,如果一些人提到在配置錯誤的文件路徑失敗))通過訂閱「錯誤「Logger事件。但我無法得到它的工作。

我試過的是實例化2個不同的記錄器一個與文件傳輸和另一個與郵件傳輸然後訂閱「錯誤」事件的第一個記錄器和錯誤事件使用記錄器與郵件傳輸發送郵件,但錯誤事件如果我指定錯誤的文件路徑並且Node進程崩潰,則不會被觸發。

var config = require('config'); 
var smtpConfig = config.get('serving.smtp'); 
var adClickLogConfig = config.get('adClick.logging'); 
var adClickMailConfig = config.get('adClick.mail'); 

var winston = require('winston'); 
require('winston-mail').Mail; 

function AdClickLoggingService (staticFunctions){ 
    this.staticFunctions = staticFunctions; 
    var fileName = adClickLogConfig.filePath + "/" + adClickLogConfig.fileName; 
    this.fileLogger = new (winston.Logger)({ 
     transports: [ 
      new (winston.transports.File)({ 
       filename: fileName, 
       level: adClickLogConfig.level, 
       timestamp : adClickLogConfig.timeStamp, 
       maxsize : adClickLogConfig.maxSize, 
       maxFiles : adClickLogConfig.maxFiles, 
       json : adClickLogConfig.json 
      }) 
     ] 
    }); 

    this.fileLogger.on('error', function (err) { 
     this.emailLogger.info(err); 
    }); 


    this.fileLogger.on('logging', function (transport, level, msg, meta) { 
     console.log('Message logged' + msg); 
     // [msg] and [meta] have now been logged at [level] to [transport] 
    }); 

    this.emailLogger = new (winston.Logger)({ 
     transports: [ 
      new (winston.transports.Mail)({ 
       host: smtpConfig.host, 
       tls: smtpConfig.tls, 
       to : adClickMailConfig.toAddress.join(), 
       from : adClickMailConfig.fromAddress, 
       subject : adClickMailConfig.subject 
      }) 
     ] 
    }); 

    this.fileLogger.on('error', function (err) { 
     console.log(err); 
    }); 
}; 

AdClickLoggingService.prototype = { 
    logAdClick:function(id, msg){ 
     msg.adClickId = id; 
     msg = this.staticFunctions.convertToString(msg); 
     return this.fileLogger.info(msg); 
    } 
}; 
+0

謝謝你的答覆。我想這是一個「無法正常工作」的建議,可以用於我的場景。只有當我有辦法檢查錯誤是否由指定的傳輸(winston-elasticsearch)產生時,它纔是一個很好的解決方案。 – napcoder 2014-12-03 13:55:58

+0

爲此,您可以創建只有一個傳輸(winston-elasticsearch)並訂閱錯誤事件的記錄器實例,然後您可以確定在記錄到elasticsearch時發生了錯誤。 – Vipresh 2014-12-03 14:24:10

+0

不幸的是,這不是一個praticable方法,因爲它會導致所有的日誌的複製(或至少一個重構),我們正在談論的是大量的代碼行:這將會耗費大量的時間/金錢。 – napcoder 2014-12-03 14:29:30