`void/log` serializes `Error` fields as `{}`, losing message and stack
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
Esta issue ainda não foi avaliada.
Descrição
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.
- Linguagem predominante
- TypeScript
- Estrelas
- 580
- Forks
- 56
- Merge médio
- 8h 32min
- PRs com merge (30d)
- 111
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de voidzero-dev/void
-
Dev: `better-auth/client/plugins` fails to resolve when auth is enabled (the `better-auth/client` alias matches it as a prefix)Talvez já em andamento @MaxtuneLee assumiu há 1 dia. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
voidzero-dev/void#565 ·
Mantenedores costumam responder em até 1 dia
-
prepareDeployArtifact omits worker.vars that the CLI managed deploy includesTalvez já em andamento @dvkam assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
voidzero-dev/void#529 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 78/100
voidzero-dev/void#428 ·
Mantenedores costumam responder em até 1 dia
-
voidzero-dev/void#579 ·
Mantenedores costumam responder em até 1 dia
-
vp build / void deploy exit 0 when a page fails to prerender, and the page is silently missingAberta
voidzero-dev/void#576 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de voidzero-dev/void
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
awesome-dsh-plugin/awesome-dsh-plugin#9184 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
farion1231/cc-switch#8829 ·
Mantenedores costumam responder em até 1 dia
-
[core-client] Remove unused hand-maintained transport helpers after the definition-table cutoverAbertadoc-audit enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100