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:
@@ -256,7 +256,10 @@ class Logger extends EventEmitter {
|
||||
error(ctx, err, req, extra) {
|
||||
const errObj = err instanceof Error ? err : new Error(String(err));
|
||||
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 } = {}) {
|
||||
|
||||
Reference in New Issue
Block a user