Logs de texto e logs estruturados
Este log de texto tem os mesmos fatos que o log estruturado abaixo dele.message e order_id. A mensagem continua igual para todos os pedidos, então você também pode contá-la.
Escolha um formato de log
Use JSON, com 1 objeto por linha. Use os mesmos nomes de campo em todos os serviços. Esta tabela lista os campos básicos e os nomes correspondentes no modelo de dados de log do OpenTelemetry e no LogBrew.
Os números de gravidade do OpenTelemetry vão de 1 a 24.
INFO começa em 9, WARN em 13, ERROR em 17 e FATAL em 21. O LogBrew aceita logs OTLP diretamente. Veja Enviar dados do OpenTelemetry.
Boas práticas de logging
Mantenha a mensagem fixa
Escreva"payment failed" e coloque o ID do pedido em um campo. Uma mensagem fixa permite agrupar, contar e criar alertas para 1 tipo de log.
Use 1 nome para cada campo
Escolhaorder_id ou orderId uma vez e use esse nome em todos os serviços. Para campos comuns, use os nomes das convenções semânticas do OpenTelemetry, como http.response.status_code.
Escolha o nível pela ação que ele exige
error significa que uma operação falhou. warning significa que o programa se recuperou. info confirma o trabalho normal. Use debug só enquanto investiga uma falha.
Escreva o horário em UTC
Use RFC 3339 com milissegundos e offset, como2026-11-07T14:21:19.773+00:00. Sem UTC e milissegundos, registros de fusos horários diferentes, ou do mesmo segundo, ficam na ordem errada.
Adicione o ID do trace e o ID do span
Com esses IDs, você lê todos os logs de 1 requisição em todos os serviços.Defina o serviço, o ambiente e a versão uma única vez
Configure esses valores na inicialização, não em cada chamada. Sem a versão, você não sabe qual implantação causou uma mudança.Registre um erro uma única vez, onde você o trata
Adicione o tipo e a mensagem do erro. Não registre o mesmo erro de novo em cada camada.Deixe segredos e dados pessoais de fora
Não registre senhas, tokens, cookies, corpos de requisição nem URLs completas com query string. Use o recurso de ocultação do seu logger. Veja Controlar dados capturados.Use nomes de campo fixos
Não use valores como nomes de campo, como{"ord_1001": "failed"}. Cada valor novo adiciona um campo novo, e 1 filtro não consegue encontrar todos os pedidos.
Escreva JSON na saída padrão em produção
Use um formato legível só em desenvolvimento.Logging estruturado em Python
O módulo padrãologging não tem um formatter JSON. Este formatter escreve os campos básicos e os valores de extra={"fields": {...}}.
LogBrewLoggingHandler. Ele envia a mensagem, o nível e o logger como campos, e os valores primitivos de extra como metadados. Veja Logging em Python.
Logging estruturado em Node.js
Por padrão, o Pino escreve 1 linha JSON para cada registro. O Winston escreve JSON comwinston.format.json(). Os dois mantêm os campos da chamada e dos loggers filhos. Veja Logging em Node.js para as duas configurações e para o ID do trace nos logs do Express.
