A simple duplex stream transport for winston to enable streaming usage.
Winston's documentation makes it seems like streaming should work out of the box but in reality it requires at least one transport that implements the stream function. Additionally, out of the built-in transports only file and http implement this function while console and stream (shockingly) lack it. So the only transports that could use streaming also require either IO or an HTTP server at the other end which isn't super useful if you don't want or need those.
There are also no existing, simple, transports that implement it so, until now, you were stuck figuring out how to roll your own. winston-duplex
solves this by providing the bare minimum required in a transport to get streaming functionality working as you'd expect.
npm install winston-duplex --save
import {DuplexTransport} from 'duplex-transport';
// no configuration necessary
const myNewTransport = new DuplexTransport();
// with configuration
const myConfiguredTransport = new DuplexTransport({
stream: Duplex | TransformOptions,
dump: boolean,
name: 'myNamedTransport'
});
logger.add(myConfiguredTransport);
// prints log object to console
// IE logger.info('test');
logger.stream().on('data', (logObj) => console.log(logObj));
All options are optional:
-
stream
-
undefined
-- a newTransform
stream usingobjectMode
is created that passes data straight to output -
TransportStreamOptions
-- anobject
of options used to instantiate a newTransform
stream -
Duplex
object -- The Duplex stream you want to use in the transport
-
-
dump --
boolean
(defaults tofalse
)- When
true
the stream will be immediately consumed by an empty event listener. Useful to prevent backpressure. - Using
false
will cause the stream to buffer winston logs until it is consumed by invokinglogger.stream()
. Useful if you need to keep a history of logs between adding the transport and invoking the stream.
- When
-
name -- an identifier for this transport appended to the
transports
array in the object returned from thelog
event listener.
MIT