fix(logger): batch fix audit-logger, circular meta, and sync callers

- Make logAudit and closeAuditLogger synchronous (were async for no reason)
- Set audit-logger silent:true initially, enable on applyAuditConfig()
- Add try-catch for circular references in consoleFormat meta JSON
- Update all callers to remove unnecessary await/.catch() on sync functions
- Add comment to shared.ts explaining acceptable sync FS usage
- Fix audit-logger test for sync closeAuditLogger

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Misaka
2026-04-03 21:25:06 +08:00
parent a2e3681c8f
commit 6a9d144bbc
10 changed files with 37 additions and 24 deletions

View File

@@ -56,7 +56,21 @@ const consoleFormat = winston.format.combine(
}
}
const metaStr = Object.keys(meta).length > 0 ? ` ${JSON.stringify(meta, null, 2)}` : ''
let metaStr = ''
if (Object.keys(meta).length > 0) {
try {
metaStr = ` ${JSON.stringify(meta, null, 2)}`
} catch {
// Fallback for circular references: stringify primitives, replace objects with placeholder
metaStr = ` ${JSON.stringify(
Object.fromEntries(
Object.entries(meta).map(([k, v]) => [k, typeof v === 'object' ? '[Object]' : v])
),
null,
2
)}`
}
}
return `${timestamp} [${level}]${contextStr} ${message}${errorStr}${metaStr}`
})
)
@@ -77,9 +91,7 @@ const fileFormat = winston.format.combine(
// Serialize any error in meta fields (skip if already serialized)
for (const key of Object.keys(info)) {
if (key !== 'error' && info[key] instanceof Error) {
info[key] = IS_PROD
? sanitizeError(serializeError(info[key]))
: serializeError(info[key])
info[key] = IS_PROD ? sanitizeError(serializeError(info[key])) : serializeError(info[key])
}
}