4.0.3 • Published 1 year ago

@financial-times/lambda-logger v4.0.3

Weekly downloads
639
License
MIT
Repository
github
Last release
1 year ago

lambda-logger

Logger useful for AWS lambda applications, particularly those which are aggregated in Splunk. Logs in JSON format using pino.

This was created to provide a simple logger, compatible with lambda, which outputs in a JSON format (n-logger) was previously used but didn't handle nested JSON fields or provide a JSON option).

This does make process.stdout.write a blocking function (process.stdout._handle.setBlocking(true);), as AWS Lambda previously streamed to an output which was synchronous, but has since changed to asynchronous behaviour, leading to lost logs.

CircleCI

Usage

const logger = require('@financial-times/lambda-logger');

logger.info({ importantField: 'some-field' }, 'Logging a thing');

Build exports

This module exports both

  • a commonjs build (the main field in package.json)
  • an ESM (ecmascript module) build (the module field in package.json)

If you're using commonjs and webpack, say with serverless-webpack it will try to load the ESM build out of the box. This exports a default export, and as such won't work if using commonjs.

The solutions to this problem are:

  1. Use import/export syntax locally and ensure your local tooling uses the ESM build, e.g. by using the esm module.
  2. Setup a webpack alias to the commonjs build:
// webpack.config.js

module.exports = {
    ...
	resolve: {
		alias: {
			// use commonjs export of lambda-logger to avoid having to use import/export syntax locally
			'@financial-times/lambda-logger':
				'@financial-times/lambda-logger/dist/lambda-logger.js',
		},
	},
};

API

The logger's API is identical to that of pino with the following exceptions:

  • The property sourcetype: _json is added to logs in production for Splunk compatibility.
  • Lambda related environment variables are added by default:
    • AWS_REGION
    • AWS_EXECUTION_ENV,
    • AWS_LAMBDA_FUNCTION_NAME,
    • AWS_LAMBDA_FUNCTION_MEMORY_SIZE,
    • AWS_LAMBDA_FUNCTION_VERSION
  • Defaults to ISO timestamp logging for splunk compatiblity. At the time of writing this incurs a 25% pino performance penalty.

Pino properties

Pino adds the following properties to logs by default:

  • level - the log level in string form. This is translated from the pino default of logging an integer representation.
  • v - the pino logger API version.
  • hostname - the hostname the process is running on.
  • pid - the process PID.

Configuration

  • NODE_ENV - pretty printing is enabled when value of NODE_ENV is not same as p, prod or production.
  • CONSOLE_LOG_LEVEL - determines the level to log at (pinto level option). Defaults to info.
  • SYSTEM_CODE - adds the systemCode property to every log.
  • ENVIRONMENT|STAGE - adds the environment property to every log. STAGE is used as a fallback due to it's default definition in the serverless framework.
4.0.3

1 year ago

4.0.1

1 year ago

4.0.2

1 year ago

4.0.0

2 years ago

3.0.0

3 years ago

2.0.4

4 years ago

2.0.0

5 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago