Log requests

This commit is contained in:
Valentin Brandl 2024-08-17 15:38:12 +02:00
parent 1b4bb1d2e2
commit 019d1d2e62
Signed by: vbrandl
GPG Key ID: CAD4DA1A789125F9

45
src/hooks.server.ts Normal file
View File

@ -0,0 +1,45 @@
import { log, timedExecution } from '$lib';
import { validate, v7 as uuidv7 } from 'uuid';
const requestIdHeader = 'x-request-id';
/** @type {import('@sveltejs/kit').Handle} */
export async function handle({ event, resolve }) {
// use incomming requestId, if it is a valid uuid, else generate one
const reqIdFromRequest = event.request.headers.get(requestIdHeader);
const { requestId, fromRequest } =
reqIdFromRequest && validate(reqIdFromRequest)
? { requestId: reqIdFromRequest, fromRequest: true }
: { requestId: uuidv7(), fromRequest: false };
var context = {
requestId,
route: event.route.id,
method: event.request.method,
userAgent: event.request.headers.get('user-agent'),
clientIP: event.getClientAddress()
};
if (fromRequest) {
log.trace(context, 'using incomming request-id');
}
// make requestId available to handlers
event.locals.requestId = requestId;
const { executionTime, result: response } = await timedExecution(async () => {
return await resolve(event);
});
response.headers.set(requestIdHeader, requestId);
log.info(
{
executionTime: `${executionTime}ms`,
status: response.status,
size: response.headers.get('content-length'),
...context
},
'finished request'
);
return response;
}