Hi guys! I do some tests:
I create a repository with different transport classes to test the issue.
asyncLogger
is an implementation extending fromwinston-transport
class. The transport is executed on the filenotWorking.js
using winston logger.asyncStream
is an implementation extending fromstream.Writable
class. The transport is executed on the fileworking.js
. The stream is used directly without winston.asyncStreamWinston
is an implementation extending fromstream.Writable
class. The transport is executed on the filesomeChunksAreMissing.js
. The stream is used as a transport for winston logger.
If you check each transport class, you will see that the implementation is almost the same.
Extending from winston-transport
class only works if the buffer is less than the highWaterMark value. Otherwise, the program will crash. To make it work, I can remove the setImmediate
function and call the callback directly.
Extending from stream.Writable
class and using the same options works as expected even with a callback called inside the setImmediate
function.
Extending from stream.Writable
class and using the same options but as a transport for winston logger, the last chunk is missing. The difference with the first scenario
is that I do can call the callback inside the setImmediate
function but the last chunk is missing.
nvm use v18
npm ci
npm run start:working
npm run start:not-working
npm run start:missing-logs