Registro para Rust: las mejores soluciones
El registro es uno de los componentes clave de cualquier aplicación en producción. En el ecosistema de Rust, existe un conjunto maduro de herramientas que permite configurar de manera flexible la recopilación, el formato y la salida de registros. En este artículo, analizaremos las bibliotecas principales, sus capacidades y ejemplos de uso.
1. El crate log — abstracción sobre el registro
La biblioteca log es la base de todo el sistema de registro en Rust. Proporciona una fachada (facade): un conjunto de traits y macros que no dependen de un backend específico. Escribes el código una vez y configuras la salida de registros a través de un logger externo.
Macros principales:
error!— errores críticoswarn!— advertenciasinfo!— mensajes informativosdebug!— información de depuracióntrace!— trazado detallado
Ejemplo de uso:
use log::{info, warn, error};
fn main() { // Antes de usar, es necesario inicializar el logger // env_logger::init(); // u otro backend info!("Aplicación iniciada"); warn!("Disco lleno al 90%"); error!("Error de conexión a la BD: {:?}", err);}2. env_logger — simplicidad y flexibilidad
El backend más popular para log. La configuración se realiza a través de la variable de entorno RUST_LOG. Es la elección ideal para proyectos pequeños y utilidades.
Instalación:
[dependencies]log = "0.4"env_logger = "0.11"Ejemplo con filtrado por módulos:
use log::info;
fn main() { env_logger::init(); // Ejecute: RUST_LOG=my_crate=info cargo run info!("Este mensaje aparecerá solo para my_crate"); // RUST_LOG=warn — mostrará solo warn y error // RUST_LOG=debug — mostrará todo, incluyendo debug}La variable RUST_LOG admite filtros complejos:
RUST_LOG=info— nivel info y superioresRUST_LOG=my_crate=debug,other_crate=warn— diferentes niveles para diferentes cratesRUST_LOG=off— desactivar el registro
3. log4rs — configuración a través de YAML
Si necesita un control avanzado — varios appenders (archivo, consola, syslog), rotación de registros, formato — elija log4rs. Está inspirado en Java Log4j.
Ejemplo de configuración 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: falseInicialización en el código:
use log4rs;
fn main() { log4rs::init_file("log4rs.yaml", Default::default()).unwrap(); log::info!("Registro configurado a través de YAML"); log::debug!("Este mensaje irá solo al archivo");}Capacidades clave de log4rs:
- Rotación de registros por tamaño o tiempo
- Diferentes appenders para diferentes módulos
- Recarga automática de la configuración
- Soporte para formato JSON
4. tracing — enfoque moderno
La biblioteca tracing del equipo de Tokio no es solo registro, sino un sistema completo para el diagnóstico de aplicaciones. Admite eventos estructurados y spans, lo que es especialmente útil en aplicaciones asíncronas.
Ejemplo con spans:
use tracing::{in También en la biblioteca
Dapper para C# (.NET): guía completa con ejemplos
Moshi para Kotlin: guía completa con ejemplos prácticos
Planificador de tareas en C# (.NET): Quartz.NET y System.Threading.Timer
Trabajo con XML en JavaScript (Node.js): bibliotecas y ejemplos
Análisis de HTML en PHP: Guía completa de bibliotecas y herramientas