Registro en Rust: revisión de las mejores bibliotecas y herramientas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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íticos
  • warn! — advertencias
  • info! — mensajes informativos
  • debug! — información de depuración
  • trace! — 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 superiores
  • RUST_LOG=my_crate=debug,other_crate=warn — diferentes niveles para diferentes crates
  • RUST_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: false


Inicializació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                    

Recommendations