@roarr/fastify
Version:
Roarr Fastify compatible logger.
72 lines (59 loc) • 2.37 kB
Markdown
# Roarr Fastify
[](https://app.travis-ci.com/github/gajus/roarr-fastify)
[](https://coveralls.io/github/gajus/roarr-fastify)
[](https://www.npmjs.com/package/@roarr/fastify)
[](https://github.com/gajus/canonical)
[](https://twitter.com/kuizinas)
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
```ts
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](https://www.fastify.io/docs/latest/Reference/Server/#requestidloglabel) in Fastify, then you also need to pass it to `@roarr/fastify`:
```ts
const app = createFastify({
logger: createFastifyLogger(log, {
requestIdLogLabel: 'requestId'
}),
requestIdLogLabel: 'requestId'
});
```