The recipes.blue monorepo
recipes.blue
recipes
appview
atproto
1import type { FetchMiddleware } from "@atcute/xrpc-server";
2import type { Logger } from "pino";
3
4export const logMiddleware = (logger: Logger): FetchMiddleware => {
5 return async (req, next) => {
6 const startTime = new Date();
7 logger.setBindings({
8 request: {
9 method: req.method,
10 path: new URL(req.url).pathname,
11 id: crypto.randomUUID(),
12 }
13 });
14
15 logger.info('Request received');
16
17 const response = await next(req);
18 const endTime = new Date();
19
20 logger.info({
21 response: {
22 status: response.status,
23 durationMs: endTime.getTime() - startTime.getTime(),
24 },
25 }, 'Finished processing request');
26
27 return response;
28 };
29};