winston-firehose
Version:
Winston logging transport for logging into Amazon AWS Firehose.
61 lines (60 loc) • 2.21 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FirehoseTransport = void 0;
const triple_beam_1 = require("triple-beam");
const winston_transport_1 = __importDefault(require("winston-transport"));
const firehose_sender_1 = require("./firehose-sender");
const types_1 = require("./types");
/**
* Winston transport that pipes log messages into AWS Kinesis Firehose.
*
* @export
* @class FirehoseTransport
* @extends {Transport}
*/
class FirehoseTransport extends winston_transport_1.default {
/**
* Creates an instance of FirehoseTransport.
*
* @param {FirehoseTransportOptions} options
* @memberof FirehoseTransport
*/
constructor(options) {
var _a, _b, _c;
super(options);
this.name = "FirehoseLogger";
if (!options.useLoggerLevel) {
this.level = (_a = options.level) !== null && _a !== void 0 ? _a : 'info';
}
if (!options.useLoggerFormat) {
this.formatter = (_b = options.formatter) !== null && _b !== void 0 ? _b : types_1.DefaultFormatter;
}
const streamName = options.streamName;
const firehoseOptions = options.firehoseOptions || {};
this.sender = (_c = options.firehoseSender) !== null && _c !== void 0 ? _c : new firehose_sender_1.FirehoseSender(streamName, firehoseOptions);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
log(info, callback) {
// Fire and forget so we don't back up the stream.
if (callback) {
setImmediate(callback);
}
let message = info[triple_beam_1.MESSAGE];
if (this.formatter) {
message = Object.assign({ timestamp: (new Date()).toISOString() }, info);
message = this.formatter(message);
}
this.sender
.send(message)
.then(() => {
this.emit('logged', message);
})
.catch((err) => {
this.emit('error', err);
});
}
}
exports.FirehoseTransport = FirehoseTransport;