@roarr/fastify

Roarr Fastify compatible logger.

Usage no npm install needed!

<script type="module">
  import roarrFastify from 'https://cdn.skypack.dev/@roarr/fastify';
</script>

README

Roarr Fastify

Travis build status Coveralls NPM version Canonical Code Style Twitter Follow

Roarr Fastify compatible logger.

Motivation

  • To have all logs produced using Roarr associated with the request ID.
  • To use a single logging mechanism for HTTP service and the rest of the application.

Usage

import {
  Roarr,
} from 'roarr';
import {
  createFastifyLogger,
} from '@roarr/fastify';
import createFastify from 'fastify';

const log = Roarr.child({
  program: 'your-program-name',
});

const app = createFastify({
  logger: createFastifyLogger(log),
});

/**
 * Uses {@link https://github.com/gajus/roarr#roarr-api-adopt|Roarr.adopt} to create an async_context
 * that adds `reqId` to all logs produced in request handlers.
 */
app.addHook('preHandler', (request, reply, done) => {
  void log.adopt(
    () => {
      done();
    },
    {
      requestId: request.id,
    },
  );
});

app.get('/', (request) => {
  // You can either explicitly retrieve logger from the request
  request.log.info('foo');
  // or you can just reference another Roarr instance.
  log.info('bar');
  // In both cases logs will include information about the HTTP request, i.e.
  // {"context":{"requestId":"req-1","program":"your-program-name","logLevel":30},"message":"foo"}
  // {"context":{"requestId":"req-1","program":"your-program-name","logLevel":30},"message":"bar"}
});