diff --git a/lib/tools.js b/lib/tools.js index b44a96129..e16c0c72e 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -20,6 +20,7 @@ const { nestedKeySym, formattersSym, messageKeySym, + errorKeySym, nestedKeyStrSym } = require('./symbols') const { isMainThread } = require('worker_threads') @@ -97,6 +98,7 @@ function asJson (obj, msg, num, time) { const serializers = this[serializersSym] const formatters = this[formattersSym] const messageKey = this[messageKeySym] + const errorKey = this[errorKeySym] let data = this[lsCacheSym][num] + time // we need the child bindings added to the output first so instance logged @@ -112,7 +114,11 @@ function asJson (obj, msg, num, time) { for (const key in obj) { value = obj[key] if (Object.prototype.hasOwnProperty.call(obj, key) && value !== undefined) { - value = serializers[key] ? serializers[key](value) : value + if (serializers[key]) { + value = serializers[key](value) + } else if (key === errorKey && serializers.err) { + value = serializers.err(value) + } const stringifier = stringifiers[key] || wildcardStringifier diff --git a/test/errorKey.test.js b/test/errorKey.test.js index 5b3d41151..9b8e80bcc 100644 --- a/test/errorKey.test.js +++ b/test/errorKey.test.js @@ -18,3 +18,17 @@ test('set the errorKey with error serializer', async ({ equal, same }) => { equal(o[errorKey].message, 'test') equal(typeof o[errorKey].stack, 'string') }) + +test('set the errorKey without error serializer', async ({ equal, same }) => { + const stream = sink() + const errorKey = 'error' + const instance = pino({ + errorKey + }, stream) + instance.error(new ReferenceError('test')) + const o = await once(stream, 'data') + equal(typeof o[errorKey], 'object') + equal(o[errorKey].type, 'ReferenceError') + equal(o[errorKey].message, 'test') + equal(typeof o[errorKey].stack, 'string') +})