DC-018: return writeErrorLog promise from Logger.error()

Logger.error() called this._log('error',...) but dropped the return value.
_log returns the writeErrorLog(...) promise for error level, so every
await logError(...)/await log.error(...) caller was awaiting undefined —
the error.log disk write was fire-and-forget. This caused:

1. __tests__/logging.test.js 'captures request context' to flake in the
   full suite (test read error.log before the un-awaited appendFile
   completed; passed in isolation).
2. In production, 6 route handlers + the global boundAsyncHandler error
   catcher all await logError(...) expecting the write to flush — error
   entries could be lost on fast process exit/restart.

Fix: add 'return' so the promise propagates. Verified: logging test
passes 10/10 full-suite runs (was ~1/6 failure rate). No behavior change
for debug/info/warn (they never wrote to disk).
This commit is contained in:
Hermes
2026-06-27 06:51:59 -07:00
parent 923e1ad6f9
commit 1c8f55edc1
+4 -1
View File
@@ -256,7 +256,10 @@ class Logger extends EventEmitter {
error(ctx, err, req, extra) { error(ctx, err, req, extra) {
const errObj = err instanceof Error ? err : new Error(String(err)); const errObj = err instanceof Error ? err : new Error(String(err));
const payload = extra && Object.keys(extra).length ? extra : undefined; const payload = extra && Object.keys(extra).length ? extra : undefined;
this._log('error', ctx, errObj.message, errObj, { req, payload }); // Return the promise from _log so callers that `await log.error(...)` /
// `await logError(...)` actually wait for the error.log write to flush.
// _log returns the writeErrorLog(...) promise for level === 'error'.
return this._log('error', ctx, errObj.message, errObj, { req, payload });
} }
_log(level, ctx, msg, data, { req, payload } = {}) { _log(level, ctx, msg, data, { req, payload } = {}) {