From 1c8f55edc19aaa1b1b65ff3074df0835854366b4 Mon Sep 17 00:00:00 2001 From: Hermes Date: Sat, 27 Jun 2026 06:51:59 -0700 Subject: [PATCH] DC-018: return writeErrorLog promise from Logger.error() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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). --- dashcaddy-api/src/utils/logging.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dashcaddy-api/src/utils/logging.js b/dashcaddy-api/src/utils/logging.js index 8e1ee7c..ae0c426 100644 --- a/dashcaddy-api/src/utils/logging.js +++ b/dashcaddy-api/src/utils/logging.js @@ -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 } = {}) {