Campos principais
| Campo | Obrigatório | Tipo | Descrição |
|---|---|---|---|
| level | Não (padrão info) | debug | info | warn | error | Severidade |
| service | Sim | string | Nome do serviço (ex.: api, worker, auth) |
| message | Sim | string | Mensagem legível |
| environment | Não (padrão production) | string | Ambiente (production, staging, development, …) |
| hostname | Não | string | Host ou identificador da máquina |
| timestamp | Não | ISO string, epoch ms ou Date | Momento do evento (padrão: hora do servidor) |
| metadata | Não | objeto | Campos extras estruturados |
| id | Não | string | ID do log (senão UUID gerado) |
Campos extras no root
Qualquer campo além dos conhecidos (userId, orderId, requestId, etc.) é mesclado em metadata e aparece no explorador de logs.
{
"level": "info",
"service": "api",
"message": "Pedido criado",
"environment": "production",
"userId": "usr_9f2a",
"orderId": "ord_8821",
"plan": "pro"
}Erros com stack trace
{
"level": "error",
"service": "api",
"message": "Unhandled exception",
"environment": "production",
"metadata": {
"requestId": "req_123",
"err": {
"type": "TypeError",
"message": "Cannot read properties of undefined",
"stack": "TypeError: ...\n at handler (route.ts:42:11)"
}
}
}Exemplo mínimo
{
"level": "info",
"service": "api",
"message": "Request processada",
"hostname": "api-pod-1",
"environment": "production",
"metadata": {
"requestId": "req_abc",
"durationMs": 120
}
}Lote (array)
[
{
"level": "info",
"service": "api",
"message": "Health check OK",
"environment": "production"
},
{
"level": "warn",
"service": "worker",
"message": "Fila lenta",
"environment": "production",
"metadata": { "queueDepth": 420 }
}
]