`void/log` serializes `Error` fields as `{}`, losing message and stack
I maintainer di solito rispondono entro 1 giorno
Una pull request collegata è già stata integrata.
- #583 di @RaphaelFakhri — integrata
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 75/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- typescript
- Ambito
- backend
Direzione di ricerca
Inizia individuando la chiamata esistente a JSON.stringify in format() e controlla come vengono assemblati i campi del logger e come sono coperti dai test. Verifica come vengono serializzati i valori Error, inclusi gli errori annidati, le catene di cause e i campi personalizzati come status; il lavoro è completato quando i log conservano questi dettagli mantenendo la struttura di payload esistente e il ripiego per i riferimenti circolari.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
logger.error() is meant for surfacing caught errors (#168), but an Error passed as a field is logged as {}. Its message, stack and cause are non-enumerable, so JSON.stringify drops them. Nothing fails, so this goes unnoticed until someone needs the log.
Reproduction
[email protected] (same code on main):
import { logger } from 'void/log';
logger.error('save failed', { error: new Error('boom') });
// {"msg":"save failed","error":{}}
logger.error('save failed', { error: new Error('wrapped', { cause: new Error('inner') }) });
// {"msg":"save failed","error":{}}
class AppError extends Error {
status = 500;
}
logger.error('save failed', { error: new AppError('boom') });
// {"msg":"save failed","error":{"status":500}}
Expected
The error's details are kept, for example:
{"msg":"save failed","error":{"name":"Error","message":"boom","stack":"Error: boom\n at ..."}}
Suggested fix
Pass a replacer to the existing JSON.stringify call in format(). This also covers nested errors and cause chains, keeps custom enumerable fields such as status, and leaves the { msg, ...fields } shape unchanged:
function replacer(_key: string, value: unknown) {
if (value instanceof Error) {
return { ...value, name: value.name, message: value.message, stack: value.stack, cause: value.cause };
}
return value;
}
return JSON.stringify(payload, replacer);
The existing catch fallback still handles circular references.
If passing Error objects is intentionally unsupported, a note in the logger docs to pass error.message / error.stack as strings would help.
- Lingua principale
- TypeScript
- Stelle
- 627
- Fork
- 66
- Merge medio
- 12h 56m
- PR unite (30g)
- 162
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di voidzero-dev/void
-
withValidator({ query }) keeps only the last value of a repeated query keyForse già presa @Dazzanova l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
voidzero-dev/void#645 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
voidzero-dev/void#648 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 50/100
voidzero-dev/void#647 ·
I maintainer di solito rispondono entro 1 giorno
-
void deploy cannot deploy a Worker with no URL after its first deploy, and --atomic refuses itAperta
Difficoltà 4/5 1-2 giorni Idoneità per principianti 48/100
voidzero-dev/void#644 ·
I maintainer di solito rispondono entro 1 giorno
-
Static output always writes `foo.html`, so trailing-slash URLs 404 on hosts like GitHub PagesAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 42/100
voidzero-dev/void#638 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di voidzero-dev/void
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
Slaymish/HealthAgent#7 ·
-
area: engine topic: math type: bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
Get-Concord-AI/concord-mcp#310 ·
I maintainer di solito rispondono entro 1 giorno
-
Correct install_claude: 'marketplace add' over a different source is refused, not replaced in placeApertatype:bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
nightgauge/nightgauge#2804 ·
I maintainer di solito rispondono entro 1 giorno