UNPKG

@infotorg/winston-log-formats

Version:

Infotorg log formats for Winston logger

58 lines (48 loc) 2.26 kB
const { format } = require('logform'); const { isObject } = require('./utils/is-object'); /** * Default trackId format options. * * @type {Readonly<{enabled: boolean, key: string}>} */ const defaultOptions = Object.freeze({ // Enable/disable the format enabled: true, // Field name/key to use for the trackId in the info object and log output. key: 'trackId', }); /** * function trackId (info) * Returns a new instance of the trackId Format which adds the specified `opts.trackId` in the message. * Can be used to add TrackId, RequestId to the log message. * * @param {Object} [info={}] The info parameter provided to a given format represents a single log message. The object itself is mutable. Every info must have at least the level and message properties. * @param {Object|undefined} [opts={}] Setting specific to the current instance of the format. * @param {string|number|Function} [info.enabled=true] Toggle trackId log output. * @param {string|number|Function} [info.key=trackId] Field name/key to use for the trackId in the info object and log output. * @param {string|number|Function} info.trackId Function to generate trackId or a value of trackId. It has access to the info object. If it is a function, it will be called to generate the trackId. If it is a value, it will be used as the trackId. It has a higher priority than the `opts.trackId`. * @param {string|number|Function} opts.trackId Function to generate trackId or a value of trackId. It has access to the info object. If it is a function, it will be called to generate the trackId. If it is a value, it will be used as the trackId. * * @returns {Function} */ const trackId = format((info, opts = {}) => { const { enabled, key } = isObject(opts) && Object.keys(opts).length ? { ...defaultOptions, ...opts } : { ...defaultOptions }; if (!enabled) { return info; } let trackId; if (info[key]) { trackId = info[key]; } else if (opts && opts[key]) { trackId = opts[key]; } else { return info; } const id = typeof trackId === 'function' ? trackId.bind(this, info)() : trackId; if ((typeof id === 'string' || typeof id === 'number') && id !== '') { info[key] = id; } return info; }); module.exports = trackId;