KyleRoss/node-lambda-log

Feature suggestion: default replacer to better handle Error objects passed as meta

mfogel opened this issue ยท 5 comments

Hi, thanks a bunch for this project. Super helpful.

Right now, when passing Error objects in the meta parameter they get logged as {} because of the design of the Error object (as you know doubt know).

const log = require('lambda-log')
const error = new Error('foo')
log.warn('Heads up!', {error})
// {"_logLevel":"warn","msg":"Heads up!","error":{},"_tags":["log","warn"]}

I can use log.options.replacer to get a much better serialization of the Error object (using the error-to-json package here):

const log = require('lambda-log')
const errorToJson = require('error-to-json').default
log.options.replacer = (key, value) => {
  if (value instanceof Error) return errorToJson(value)
  return value
}

const error = new Error('foo')
log.warn('Heads up!', {error})
// {"_logLevel":"warn","msg":"Heads up!","error":{"name":"Error","message":"foo","stack":"Error: foo\n    at REPL9:1:15\n    at Script.runInThisContext (vm.js:120:18)\n    at REPLServer.defaultEval (repl.js:442:29)\n    at bound (domain.js:427:14)\n    at REPLServer.runBound [as eval] (domain.js:440:12)\n    at REPLServer.onLine (repl.js:777:10)\n    at REPLServer.emit (events.js:326:22)\n    at REPLServer.EventEmitter.emit (domain.js:483:12)\n    at REPLServer.Interface._onLine (readline.js:329:10)\n    at REPLServer.Interface._line (readline.js:658:8)"},"_tags":["log","warn"]}

My suggestion is to consider making this the default behavior. Are there any use cases where serializing an Error to {} would be the better behavior?

Thanks again for the project!

@mfogel Right now, this package will handle Error objects correctly when passed in as the message versus within the meta. I can see the use cases where you may want to pass an error in the meta instead.

I'm trying to keep the number of dependencies within this package as minimal as possible so I think I would like to recreate the functionality of the error-to-json package inside of this one given it's a minimal amount of code.

I'll work on adding this in the next release. Thanks for the feature request!

@mfogel This has been implemented and published in v3.0.0. I'm still waiting on the site to go live with the updated documentation. Thanks for the feature suggestion!

Thanks @KyleRoss ! Appreciate it very much!

@all-contributors please add @mfogel for ideas

@KyleRoss

I've put up a pull request to add @mfogel! ๐ŸŽ‰