Registro em Rust: visão geral das melhores bibliotecas e ferramentas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Logging para Rust: melhores soluções



Logging é um dos componentes-chave de qualquer aplicação de produção. No ecossistema Rust, existe um conjunto maduro de ferramentas que permite configurar de forma flexível a coleta, formatação e saída de logs. Neste artigo, vamos analisar as principais bibliotecas, suas capacidades e exemplos de uso.



1. Crate log — abstração sobre logging



A biblioteca log é a base de todo o sistema de logging em Rust. Ela fornece uma fachada (facade) — um conjunto de traits e macros que não dependem de um backend específico. Você escreve o código uma vez e a saída dos logs é configurada através de um logger externo.



Macros principais:

  • error! — erros críticos
  • warn! — avisos
  • info! — mensagens informativas
  • debug! — informações de depuração
  • trace! — rastreamento detalhado


Exemplo de uso:

use log::{info, warn, error};

fn main() { // Antes de usar, é necessário inicializar o logger // env_logger::init(); // ou outro backend info!("Aplicação iniciada"); warn!("Disco 90% cheio"); error!("Erro de conexão com o BD: {:?}", err);}


2. env_logger — simplicidade e flexibilidade



O backend mais popular para log. A configuração é feita através da variável de ambiente RUST_LOG. É a escolha ideal para projetos pequenos e utilitários.



Instalação:

[dependencies]log = "0.4"env_logger = "0.11"


Exemplo com filtragem por módulos:

use log::info;

fn main() { env_logger::init(); // Execute: RUST_LOG=my_crate=info cargo run info!("Esta mensagem aparecerá apenas para my_crate"); // RUST_LOG=warn — mostrará apenas warn e error // RUST_LOG=debug — mostrará tudo, incluindo debug}


A variável RUST_LOG suporta filtros complexos:

  • RUST_LOG=info — nível info e acima
  • RUST_LOG=my_crate=debug,other_crate=warn — níveis diferentes para crates diferentes
  • RUST_LOG=off — desabilitar logging


3. log4rs — configuração via YAML



Se você precisa de controle avançado — múltiplos appenders (arquivo, console, syslog), rotação de logs, formatação — escolha log4rs. Ele é inspirado no Java Log4j.



Exemplo de configuração log4rs.yaml:

refresh_rate: 30 seconds

appenders: stdout: kind: console encoder: pattern: "{d(%Y-%m-%d %H:%M:%S)} [{l}] {m}{n}" file: kind: file path: "app.log" encoder: pattern: "{d} {l} {M} - {m}{n}"

root: level: info appenders: - stdout

loggers: app::db: level: debug appenders: - file additive: false


Inicialização no código:

use log4rs;

fn main() { log4rs::init_file("log4rs.yaml", Default::default()).unwrap(); log::info!("Logging configurado via YAML"); log::debug!("Esta mensagem irá apenas para o arquivo");}


Principais capacidades do log4rs:

  • Rotação de logs por tamanho ou tempo
  • Appenders diferentes para módulos diferentes
  • Recarregamento automático da configuração
  • Suporte a formato JSON


4. tracing — abordagem moderna



A biblioteca tracing da equipe Tokio não é apenas logging, mas um sistema completo para diagnóstico de aplicações. Ela suporta eventos estruturados e spans, o que é especialmente útil em aplicações assíncronas.



Exemplo com spans:

use tracing::{in                    

Recommendations