Introdução ao registro em Rust
Registro (logging) é o processo de gravar informações sobre a execução de um programa. Para desenvolvedores iniciantes em Rust, o registro pode parecer algo complexo, mas na verdade é uma das ferramentas mais poderosas para depuração e monitoramento. Neste artigo, abordaremos as melhores práticas de registro em Rust que ajudarão você a escrever aplicações mais confiáveis e sustentáveis.
Por que o registro é tão importante? Imagine que sua aplicação falhe inesperadamente em produção. Sem logs, você ficará completamente no escuro — terá que adivinhar o que deu errado. Com o registro configurado corretamente, você poderá encontrar e corrigir o erro rapidamente. No Rust, o ecossistema de registro é construído sobre crates poderosas e flexíveis que veremos hoje.
1. Fundamentos do registro: a crate log
Em Rust, o padrão de facto para registro é a crate log. Ela fornece uma interface abstrata que não depende de uma implementação específica. Isso significa que você pode escrever código usando as macros do log e depois alternar entre diferentes backends (por exemplo, env_logger, log4rs ou slog) sem alterar o código principal.
Instalação e configuração
Adicione a dependência ao seu Cargo.toml:
[dependencies]log = "0.4"env_logger = "0.10"Agora você pode usar as macros de registro no seu código. Aqui está um exemplo simples:
use log::{info, warn, error};
fn main() { // Inicializamos o logger env_logger::init();
let user = "Alexey"; let age = 25;
info!("Aplicação iniciada"); warn!("Usuário {} tem idade {}, verifique os dados", user, age); error!("Não foi possível conectar ao banco de dados");
println!("Programa finalizado");}Importante: sem chamar env_logger::init(), as macros do log não exibirão nada. A inicialização deve ocorrer uma vez, no início do programa.
Níveis de registro
A crate log suporta cinco níveis de registro (do mais importante ao menos importante):
error!— erros críticos que exigem atenção imediata. Use para situações em que o programa não pode continuar.warn!— avisos. Algo deu errado, mas o programa pode continuar (por exemplo, API obsoleta ou valor inesperado).info!— informações gerais sobre o progresso do programa. Útil para rastrear eventos-chave (inicialização, finalização, transições importantes).debug!— informações de depuração. Usado durante o desenvolvimento para análise detalhada.trace!— o nível mais detalhado. Registra cada passo da execução. Use com cuidado — pode poluir muito a saída.
A filtragem por nível ocorre automaticamente. Por padrão, o env_logger exibe todas as mensagens com nível error, warn e info. Você pode alterar isso facilmente usando a variável de ambiente RUST_LOG:
# Mostrar apenas errosRUST_LOG=error cargo run
# Mostrar tudo, incluindo traceRUST_LOG=trace cargo run
# Mostrar apenas para um módulo específicoRUST_LOG=my_module=debug cargo run2. Registro prático: logs estruturados
Registro simples de strings é bom, mas para sistemas de produção é melhor usar logs estruturados. Em vez de escrever "Usuário Alexey entrou no sistema", você pode gravar um objeto JSON com campos event, user, timestamp. Isso simplifica a análise de logs com ferramentas como Elasticsearch ou Grafana.