Fix crash handling and log noise in logging feature

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>
This commit is contained in:
Julian Appel 2026-08-06 19:58:31 +02:00
parent ea3c02cd6b
commit fa96be2d42
6 changed files with 49 additions and 15 deletions

View file

@ -47,13 +47,19 @@ export function createLogger(
if (LEVEL_SEVERITY[level] > LEVEL_SEVERITY[threshold]) {
return;
}
const line = JSON.stringify({
timestamp: new Date().toISOString(),
level,
scope,
message,
...meta,
});
const timestamp = new Date().toISOString();
let line: string;
try {
line = JSON.stringify({ timestamp, level, scope, message, ...meta });
} catch {
line = JSON.stringify({
timestamp,
level,
scope,
message,
logError: "failed to serialize log metadata",
});
}
if (level === "error" || level === "warn") {
console.error(line);
} else {