Add consistent API request logging and a themed 404 page, bump to 0.4.0
Every app/api route handler now goes through withRouteLogging, which logs a correlated reqId/method/path/status/duration for each request and turns any uncaught error into a logged stack trace plus a clean JSON 500 instead of Next's default opaque failure. proxy.ts logs rejected auth attempts, and instrumentation.ts's onRequestError catches anything that still escapes a route handler. Also adds a minimal not-found page matching the app's card styling. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+12
-5
@@ -34,14 +34,21 @@ export interface Logger {
|
||||
info(message: string, fields?: LogFields): void;
|
||||
warn(message: string, fields?: LogFields): void;
|
||||
error(message: string, fields?: LogFields): void;
|
||||
/** Returns a logger that merges `bindings` into every call's fields - for attaching
|
||||
* per-request context (reqId, route) without threading it through every log call. */
|
||||
child(bindings: LogFields): Logger;
|
||||
}
|
||||
|
||||
/** Scoped logger. `scope` is the bracketed tag, e.g. createLogger("api") -> "[api]". */
|
||||
export function createLogger(scope: string): Logger {
|
||||
export function createLogger(scope: string, bindings?: LogFields): Logger {
|
||||
const log = (level: LogLevel, message: string, fields?: LogFields) =>
|
||||
write(level, scope, message, bindings || fields ? { ...bindings, ...fields } : undefined);
|
||||
|
||||
return {
|
||||
debug: (message, fields) => write("debug", scope, message, fields),
|
||||
info: (message, fields) => write("info", scope, message, fields),
|
||||
warn: (message, fields) => write("warn", scope, message, fields),
|
||||
error: (message, fields) => write("error", scope, message, fields),
|
||||
debug: (message, fields) => log("debug", message, fields),
|
||||
info: (message, fields) => log("info", message, fields),
|
||||
warn: (message, fields) => log("warn", message, fields),
|
||||
error: (message, fields) => log("error", message, fields),
|
||||
child: (extra) => createLogger(scope, { ...bindings, ...extra }),
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user