winston
3.19.0 · 7 Dec 2025MIT36.6M / weekRepositoryHomepagenpmAtom feed
3.19.0 is the newest release of 3.x.
In short
6 new9 fixed1 internal
Release note
v3.2.0 / 2019-01-26
Sorry it too so long edition
NOTE: this was our first release using Github Projects. See the
3.2.0 Release Project.
New Features!
[#1471], (@kibertoad) Implement child loggers.
[#1418], (@mfrisbey) Precompile ES6 syntax before publishing to npm.
[#1533], (@kibertoad) Update to Babel 7.
[#1562], (@indexzero) [fix] Better handling of
new Error(string)
throughout the pipeline(s). (Fixes [#1338], [#1486]).
Bug Fixes
[#1355], (@DABH) Fix issues with ExceptionHandler (Fixes [#1289]).
[#1463], (@SerayaEryn) Bubble transport
warnevents up to logger in
addition toerrors.[#1480], [#1503], (@SerayaEryn) File tailrolling fix.
[#1483], (@soldair) Assign log levels to un-bound functions.
[#1513], (@TilaTheHun0) Set maxListeners for Console transport.
[#1521], (@jamesbechet) Fix Transform from
readable-streamusing CRA.[#1434], (@Kouzukii) Fixes logger.query function (regression from
3.0.0)[#1526], (@pixtron) Log file without .gz for tailable (Fixes [#1525]).
[#1556], (@adoyle-h) Support to create log directory if it doesn't exist
for FileTransport.
New splat behavior
[#1552], (@indexzero) Consistent handling of meta with (and without)
interpolation inwinstonandlogform.[#1499], (@DABH) Provide all of
SPLATto formats (Fixes [#1485]).[#1485], (@mpabst) Fixing off-by-one when using both meta and splat.
Previously splat would have added a meta property for any additionalinfo[SPLAT] beyond the expected number of tokens.
As of logform@2.0.0, format.splat assumes additional splat paramters
(aka "metas") are objects and merges enumerable properties into the info.
e.g. BE ADVISED previous "metas" that were not objects will very likely
lead to odd behavior. e.g.
const { createLogger, format, transports } = require('winston');
const { splat } = format;
const { MESSAGE, LEVEL, SPLAT } = require('triple-beam');
const logger = createLogger({
format: format.combine(
format.splat(),
format.json()
),
transports: [new transports.Console()]
});
// Expects two tokens, but four splat parameters provided.
logger.info(
'Let us %s for %j', // message
'objects', // used for %s
{ label: 'sure' }, // used for %j
'lol', ['ok', 'why'] // Multiple additional meta values
);
// winston < 3.2.0 && logform@1.x behavior:
// Added "meta" property.
//
// { level: 'info',
// message: 'Let us objects for {"label":"sure"}',
// meta: ['lol', ['ok', 'why']],
// [Symbol(level)]: 'info',
// [Symbol(message)]: 'Let us %s for %j',
// [Symbol(splat)]: [ 'objects', { label: 'sure' } ] }
// winston >= 3.2.0 && logform@2.x behavior: Enumerable properties
// assigned into `info`. Since **strings and Arrays only have NUMERIC
// enumerable properties we get this behavior!**
//
// { '0': 'ok',
// '1': 'why',
// '2': 'l',
// level: 'info',
// message: 'Let us objects for {"label":"sure"}',
// [Symbol(level)]: 'info',
// [Symbol(message)]: 'Let us %s for %j',
// [Symbol(splat)]: [ 'objects', { label: 'sure' } ] }