diff --git a/docs/api.md b/docs/api.md index 6e15ba350..8525a7e69 100644 --- a/docs/api.md +++ b/docs/api.md @@ -807,6 +807,7 @@ The `pino.stdTimeFunctions` object provides a very small set of common functions * `pino.stdTimeFunctions.epochTime`: Milliseconds since Unix epoch (Default) * `pino.stdTimeFunctions.unixTime`: Seconds since Unix epoch * `pino.stdTimeFunctions.nullTime`: Clears timestamp property (Used when `timestamp: false`) +* `pino.stdTimeFunctions.isoTime`: ISO 8601-formatted time in UTC * See [`timestamp` option](#opt-timestamp) diff --git a/lib/time.js b/lib/time.js index 104c440b0..420a028f1 100644 --- a/lib/time.js +++ b/lib/time.js @@ -6,4 +6,6 @@ const epochTime = () => `,"time":${Date.now()}` const unixTime = () => `,"time":${Math.round(Date.now() / 1000.0)}` -module.exports = { nullTime, epochTime, unixTime } +const isoTime = () => `,"time":"${new Date(Date.now()).toISOString()}"` // using Date.now() for testability + +module.exports = { nullTime, epochTime, unixTime, isoTime } diff --git a/test/timestamp.test.js b/test/timestamp.test.js index 89e784398..87bdc09f9 100644 --- a/test/timestamp.test.js +++ b/test/timestamp.test.js @@ -11,6 +11,7 @@ test('pino exposes standard time functions', async ({ ok }) => { ok(pino.stdTimeFunctions.epochTime) ok(pino.stdTimeFunctions.unixTime) ok(pino.stdTimeFunctions.nullTime) + ok(pino.stdTimeFunctions.isoTime) }) test('pino accepts external time functions', async ({ is }) => { @@ -101,3 +102,20 @@ test('pino.stdTimeFunctions.unixTime returns seconds based timestamps', async ({ is(result.time, 1531069920) Date.now = now }) + +test('pino.stdTimeFunctions.isoTime returns ISO 8601 timestamps', async ({ is }) => { + const opts = { + timestamp: pino.stdTimeFunctions.isoTime + } + const stream = sink() + const instance = pino(opts, stream) + const ms = 1531069919686 + const now = Date.now + Date.now = () => ms + const iso = new Date(ms).toISOString() + instance.info('foobar') + const result = await once(stream, 'data') + is(result.hasOwnProperty('time'), true) + is(result.time, iso) + Date.now = now +})