Review of the logging work from the previous commit turned up a real correctness issue: the uncaughtException/unhandledRejection handlers logged the error but let the process keep running, which silently disabled Node's default crash-on-fatal-error behavior and could leave a zombie process serving broken requests instead of restarting. Both processes now log and then exit(1); restart: unless-stopped is added to both services so Docker actually brings them back up. Also: harden the logger against JSON.stringify throwing on non-serializable meta, log aborted (closed-before-finished) requests in the API access log, and stop the Next.js proxy from logging the Docker healthcheck's request to "/" every few seconds so real navigation events aren't drowned out. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
21 lines
671 B
TypeScript
21 lines
671 B
TypeScript
import { NextResponse } from "next/server";
|
|
import type { NextRequest } from "next/server";
|
|
import { createLogger } from "./shared/logging/logger";
|
|
|
|
const logger = createLogger("web:navigation");
|
|
|
|
export function proxy(request: NextRequest) {
|
|
// The Docker healthcheck hits "/" every few seconds with no User-Agent
|
|
// header; skip it so real navigation isn't drowned out in the logs.
|
|
if (request.headers.get("user-agent")) {
|
|
logger.info("page request", {
|
|
method: request.method,
|
|
path: request.nextUrl.pathname,
|
|
});
|
|
}
|
|
return NextResponse.next();
|
|
}
|
|
|
|
export const config = {
|
|
matcher: ["/((?!_next/static|_next/image|favicon.ico|api).*)"],
|
|
};
|