Files
sexy/instrumentation.ts
T

34 lines
1.3 KiB
TypeScript
Raw Normal View History

import { createLogger } from "@/lib/logger";
export async function register() {
// Only the Node.js server runtime touches better-sqlite3; the Edge
// middleware runtime must never import this module.
if (process.env.NEXT_RUNTIME === "nodejs") {
const { runMigrations } = await import("@/lib/db/migrate");
runMigrations();
}
}
export async function onRequestError(
error: unknown,
request: { path: string; method: string; headers: Record<string, string | string[]> },
context: { routerKind: string; routePath: string; routeType: string },
) {
const log = createLogger("uncaught");
// Safety net for errors that escape a route handler's own try/catch (e.g. a
// bug in code that never reaches withRouteLogging, or a rendering error) -
// route handlers wrapped in withRouteLogging already log and convert their
// own errors to a JSON 500, so this rarely double-logs the same failure.
const digest = typeof error === "object" && error !== null && "digest" in error ? String(error.digest) : undefined;
log.error("unhandled error", {
message: error instanceof Error ? error.message : String(error),
digest,
stack: error instanceof Error ? error.stack : undefined,
path: request.path,
method: request.method,
routePath: context.routePath,
routeType: context.routeType,
});
}