input-output-logger

Logs the incoming request (input) and the response (output).

By default, the logging operate by using the console.log function. You can pass as a parameter a custom logger with additional logic if you need. It can be useful if you want to process the log by doing a http call or anything else.

Install

To install this middleware you can use NPM:

npm install --save @middy/input-output-logger

Options

  • logger function (default console.log): logging function that accepts an object
  • executionContext boolean (default false): Include tenantId to the logger
  • lambdaContext boolean (default false): Include AWS Lambda context object to the logger
  • omitPaths string[] (default []): property accepts an array of paths that will be used to remove particular fields import the logged objects. This could serve as a simple way to redact sensitive data from logs (default []). Examples: name, user.name, users.[].name
  • mask string: String to replace omitted values with. Example: ***omitted***

Note: If using with { executionMode:executionModeStreamifyResponse }, your ReadableStream must be of type string.

Sample usage

import middy from '@middy/core'
import inputOutputLogger from '@middy/input-output-logger'

const lambdaHandler = (event, context) => {
  const response = {
    statusCode: 200,
    headers: {},
    body: JSON.stringify({ message: 'hello world' })
  }
  return response
}

export const handler = middy().use(inputOutputLogger()).handler(lambdaHandler)
import middy from '@middy/core'
import inputOutputLogger from '@middy/input-output-logger'
import pino from 'pino'

const logger = pino()

const lambdaHandler = (event, context) => {
  // ...
  return response
}

export const handler = middy()
  .use(
    inputOutputLogger({
      logger: (request) => {
        const child = logger.child(request.context)
        child.info(request.event ?? request.response)
      },
      executionContext: true,
	  lambdaContext: true,
    })
  )
  .handler(lambdaHandler)