我正在使用winston和winston-elasticsearch来登录Elastic Search . 我没有问题设置传输,一切正常工作 .
无论如何,如果ES服务器无法访问,则在停机期间发送的日志似乎永远丢失 .
有没有办法告诉Winston在Elastic-Search传输失败时(并且只有当时)才能登录?
我也试图处理这种情况(即当一个传输无法记录消息时(在我的情况下是一个文件 Logger ,如果有人在配置中提到了错误的文件路径,它可能会失败))通过订阅Logger的“错误”事件 . 但我无法让它发挥作用 .
我试过的是实例化2个不同的Logger One和File Transport,另一个用Mail Transport然后订阅了第一个 Logger 的“error”事件,并在错误事件中使用Logger with Mail传输发送邮件,但是如果没有触发错误事件,我指定了错误的文件路径,并且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); } };
1 回答
我也试图处理这种情况(即当一个传输无法记录消息时(在我的情况下是一个文件 Logger ,如果有人在配置中提到了错误的文件路径,它可能会失败))通过订阅Logger的“错误”事件 . 但我无法让它发挥作用 .
我试过的是实例化2个不同的Logger One和File Transport,另一个用Mail Transport然后订阅了第一个 Logger 的“error”事件,并在错误事件中使用Logger with Mail传输发送邮件,但是如果没有触发错误事件,我指定了错误的文件路径,并且Node进程崩溃了 .