Introduzindo structured_logger para Flutter
· 2 min para ler
Logging em apps Flutter costuma ser uma mistura de print, debugPrint e strings montadas na hora. Funciona no dia a dia, mas dificulta busca, alertas e correlação quando o app cresce.
O problema com logs não estruturados
Imagine depurar um problema em produção com a seguinte linha:
User 42 failed to checkout after 3 retries
Quem é o usuário 42? Qual foi o erro? Em qual tentativa falhou? Sem campos separados, cada ferramenta de observabilidade precisa fazer parsing frágil de texto livre.
A abordagem estruturada
Com structured_logger, você separa o template da mensagem das propriedades:
await logger.log(
'User {userId} failed checkout after {retries} retries: {error}',
level: LogLevel.error,
data: {
'userId': 42,
'retries': 3,
'error': 'payment_timeout',
},
);
O template permanece estável para agrupamento; os dados ficam indexáveis em backends como Seq.
Sinks: um evento, vários destinos
O diferencial do pacote é o modelo de sinks. O mesmo evento pode ir para:
- Terminal (
SimpleLineSink) — leitura rápida durante o desenvolvimento - DevTools (
DefaultSink) — inspeção no log do desenvolvedor Dart - Seq (
SinkSeq) — centralização em produção
final logger = StructureLogger();
logger.addSink(SimpleLineSink());
logger.addSink(SinkSeq('https://seq.example.com', apiKey: apiKey));
Próximos passos
- Leia a documentação de início rápido
- Explore a arquitetura de sinks
- Contribua no repositório GitHub
