Skip to content

Instantly share code, notes, and snippets.

@muritaladev
Created August 30, 2022 12:01
Show Gist options
  • Save muritaladev/d3bcca01d32503f3320505fbec037e5c to your computer and use it in GitHub Desktop.
Save muritaladev/d3bcca01d32503f3320505fbec037e5c to your computer and use it in GitHub Desktop.
import pino from "pino";
const logger = pino({
serializers: {
req(req: any) {
return {
method: req.method,
headers: req.headers,
ip: req.ip,
url: req.url,
path: req.path,
params: req.params,
query: req.query,
body: req.body,
};
},
res(res: any) {
return {
statusCode: res.raw.statusCode,
headers: res.getHeaders(),
body: res.raw.payload,
};
},
err(err: any) {
return {
id: err.id,
type: err.type,
code: err.code,
message: err.message,
stack: err.stack,
};
},
},
});
export default logger;
import fp from "fastify-plugin";
import Logger from ".";
import { getLogLevelFromStatusCode } from "./util";
function logRequest(req, reply) {
const logLevel = getLogLevelFromStatusCode(reply.raw.statusCode);
Logger[logLevel]({
req,
res: reply,
});
}
export default fp((fastify, options, done) => {
fastify.addHook("preSerialization", (req, reply, payload, done) => {
Object.assign(reply.raw, { payload });
done();
});
fastify.addHook("onResponse", logRequest);
done();
});
export function getLogLevelFromStatusCode(statusCode: number) {
if (statusCode >= 100 && statusCode < 400) return "info";
if (statusCode >= 400 && statusCode < 500) return "warn";
return "error";
}
@muritaladev
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment