Registro para Rust: mejores bibliotecas y herramientas
El registro es una parte esencial del desarrollo de cualquier aplicación seria. En el ecosistema de Rust existen varias soluciones maduras que permiten gestionar de forma flexible la salida de mensajes, establecer niveles de importancia y formatos. En este artículo, revisaremos las bibliotecas más populares para el registro en Rust, sus características y proporcionaremos ejemplos de uso.
1. Trait base log
La biblioteca log (crate log) es la base para todos los sistemas de registro en Rust. Proporciona el trait abstracto Log y macros (info!, warn!, error!, debug!, trace!). Por sí sola no genera salida de datos — para eso se necesita una implementación (backend).
// Cargo.toml// [dependencies]// log = "0.4"
use log::{info, warn, error};
fn main() { info!("Aplicación iniciada"); warn!("Baja memoria disponible: {} MB", 128); error!("Error de conexión a la base de datos");}Niveles de registro en orden ascendente de importancia: trace, debug, info, warn, error. Por defecto, solo se muestran mensajes de nivel info y superiores.
2. env_logger — opción simple y popular
env_logger es la implementación más común del trait Log. Se configura a través de la variable de entorno RUST_LOG y envía mensajes al flujo de error estándar (stderr).
// Cargo.toml// [dependencies]// log = "0.4"// env_logger = "0.10"
use log::info;
fn main() { env_logger::init(); info!("env_logger inicializado");}
// Ejecución: RUST_LOG=info cargo runCaracterísticas:
- Configuración mínima — basta con una línea
env_logger::init(). - Filtrado por módulos:
RUST_LOG=my_crate=debug,other_crate=info. - Soporte para salida de color en la terminal.
- Ideal para utilidades pequeñas y prototipos.
3. log4rs — análogo configurable de log4j/log4net
log4rs (crate log4rs) es un potente framework inspirado en Java log4j. Permite configurar el registro mediante archivos YAML/JSON/TOML o programáticamente.
// Cargo.toml// [dependencies]// log = "0.4"// log4rs = "1.2"
use log::info;
fn main() { // Configuración programática log4rs::init_file("log4rs.yaml", Default::default()).unwrap(); info!("log4rs configurado mediante archivo");}
// 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} {t} - {m}{n}"// root:// level: info// appenders:// - stdout// - fileCaracterísticas:
- Soporte para múltiples appenders (salida a archivo, consola, syslog, network).
- Rotación automática de logs por tamaño o tiempo.
- Filtrado por módulos, niveles, filtros personalizados.
- Recomendado para aplicaciones de servidor y microservicios.
4. tracing — registro asíncrono y estructurado
tracing (crate tracing) es una alternativa moderna desarrollada por el equipo de Tokio. Soporta eventos estructurados, spans para rastrear tiempos de ejecución y contextos asíncronos.
// Cargo.toml// [dependencies]// tracing = "0.1"// tracing-subscriber = "0.3"
use tracing::{info, span, Level};use tracing_subscriber::fmt;
fn main() { // Inicialización del subscriber fmt::init();
let span = span!(Lev