123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- 'use strict';
- const util = require('util');
- const { LEVEL } = require('triple-beam');
- const TransportStream = require('./');
- /**
- * Constructor function for the LegacyTransportStream. This is an internal
- * wrapper `winston >= 3` uses to wrap older transports implementing
- * log(level, message, meta).
- * @param {Object} options - Options for this TransportStream instance.
- * @param {Transpot} options.transport - winston@2 or older Transport to wrap.
- */
- const LegacyTransportStream = module.exports = function LegacyTransportStream(options = {}) {
- TransportStream.call(this, options);
- if (!options.transport || typeof options.transport.log !== 'function') {
- throw new Error('Invalid transport, must be an object with a log method.');
- }
- this.transport = options.transport;
- this.level = this.level || options.transport.level;
- this.handleExceptions = this.handleExceptions || options.transport.handleExceptions;
- // Display our deprecation notice.
- this._deprecated();
- // Properly bubble up errors from the transport to the
- // LegacyTransportStream instance, but only once no matter how many times
- // this transport is shared.
- function transportError(err) {
- this.emit('error', err, this.transport);
- }
- if (!this.transport.__winstonError) {
- this.transport.__winstonError = transportError.bind(this);
- this.transport.on('error', this.transport.__winstonError);
- }
- };
- /*
- * Inherit from TransportStream using Node.js built-ins
- */
- util.inherits(LegacyTransportStream, TransportStream);
- /**
- * Writes the info object to our transport instance.
- * @param {mixed} info - TODO: add param description.
- * @param {mixed} enc - TODO: add param description.
- * @param {function} callback - TODO: add param description.
- * @returns {undefined}
- * @private
- */
- LegacyTransportStream.prototype._write = function _write(info, enc, callback) {
- if (this.silent || (info.exception === true && !this.handleExceptions)) {
- return callback(null);
- }
- // Remark: This has to be handled in the base transport now because we
- // cannot conditionally write to our pipe targets as stream.
- if (!this.level || this.levels[this.level] >= this.levels[info[LEVEL]]) {
- this.transport.log(info[LEVEL], info.message, info, this._nop);
- }
- callback(null);
- };
- /**
- * Writes the batch of info objects (i.e. "object chunks") to our transport
- * instance after performing any necessary filtering.
- * @param {mixed} chunks - TODO: add params description.
- * @param {function} callback - TODO: add params description.
- * @returns {mixed} - TODO: add returns description.
- * @private
- */
- LegacyTransportStream.prototype._writev = function _writev(chunks, callback) {
- for (let i = 0; i < chunks.length; i++) {
- if (this._accept(chunks[i])) {
- this.transport.log(
- chunks[i].chunk[LEVEL],
- chunks[i].chunk.message,
- chunks[i].chunk,
- this._nop
- );
- chunks[i].callback();
- }
- }
- return callback(null);
- };
- /**
- * Displays a deprecation notice. Defined as a function so it can be
- * overriden in tests.
- * @returns {undefined}
- */
- LegacyTransportStream.prototype._deprecated = function _deprecated() {
- // eslint-disable-next-line no-console
- console.error([
- `${this.transport.name} is a legacy winston transport. Consider upgrading: `,
- '- Upgrade docs: https://github.com/winstonjs/winston/blob/master/UPGRADE-3.0.md'
- ].join('\n'));
- };
- /**
- * Clean up error handling state on the legacy transport associated
- * with this instance.
- * @returns {undefined}
- */
- LegacyTransportStream.prototype.close = function close() {
- if (this.transport.close) {
- this.transport.close();
- }
- if (this.transport.__winstonError) {
- this.transport.removeListener('error', this.transport.__winstonError);
- this.transport.__winstonError = null;
- }
- };
|