Awesome
Roarr Fastify
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"}
});
Configuration
If you have customized requestIdLogLabel
setting in Fastify, then you also need to pass it to @roarr/fastify
:
const app = createFastify({
logger: createFastifyLogger(log, {
requestIdLogLabel: 'requestId'
}),
requestIdLogLabel: 'requestId'
});