0
我使用溫斯頓溫斯頓 - elasticsearch登錄搜索彈性。我沒有問題設置運輸,一切正常工作。溫斯頓記錄 - 恢復交通,如果其他傳輸失敗
無論如何,如果ES服務器成爲不可達,在停機時間發送日誌似乎永遠失去了。
有沒有辦法告訴溫斯頓登錄文件時(且僅當)的彈性搜索運輸不成?
我使用溫斯頓溫斯頓 - elasticsearch登錄搜索彈性。我沒有問題設置運輸,一切正常工作。溫斯頓記錄 - 恢復交通,如果其他傳輸失敗
無論如何,如果ES服務器成爲不可達,在停機時間發送日誌似乎永遠失去了。
有沒有辦法告訴溫斯頓登錄文件時(且僅當)的彈性搜索運輸不成?
我也試圖處理這種情況下(即當傳輸失敗時記錄的消息(在我的情況下,文件記錄器,它可以,如果一些人提到在配置錯誤的文件路徑失敗))通過訂閱「錯誤「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);
}
};
謝謝你的答覆。我想這是一個「無法正常工作」的建議,可以用於我的場景。只有當我有辦法檢查錯誤是否由指定的傳輸(winston-elasticsearch)產生時,它纔是一個很好的解決方案。 – napcoder 2014-12-03 13:55:58
爲此,您可以創建只有一個傳輸(winston-elasticsearch)並訂閱錯誤事件的記錄器實例,然後您可以確定在記錄到elasticsearch時發生了錯誤。 – Vipresh 2014-12-03 14:24:10
不幸的是,這不是一個praticable方法,因爲它會導致所有的日誌的複製(或至少一個重構),我們正在談論的是大量的代碼行:這將會耗費大量的時間/金錢。 – napcoder 2014-12-03 14:29:30