Registro para C++: mejores bibliotecas y soluciones

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 C++: las mejores soluciones



El registro es un componente crítico de cualquier proyecto serio de C++. Ayuda a rastrear la ejecución del programa, encontrar errores, analizar el rendimiento y auditar las acciones de los usuarios. A diferencia de Python, donde el módulo integrado logging es el estándar de facto, en C++ no existe una solución integrada única. Sin embargo, la comunidad ha creado varias bibliotecas potentes y flexibles. En este artículo, analizaremos las mejores: spdlog, Google glog, Boost.Log y Easylogging++.



Criterios para elegir una biblioteca de registro

Antes de pasar a la revisión, es importante entender qué tener en cuenta al elegir:

  • Rendimiento: mínimo impacto en la velocidad de la aplicación.
  • Flexibilidad: posibilidad de configurar formatos, niveles de registro (DEBUG, INFO, WARN, ERROR) y salidas (archivo, consola, syslog).
  • Facilidad de integración: las bibliotecas header-only son preferibles para proyectos pequeños.
  • Soporte para subprocesos múltiples: seguridad en subprocesos y escritura asíncrona.
  • Licencia: compatibilidad con proyectos comerciales (MIT, Apache, Boost).


1. spdlog — el más rápido y moderno

spdlog es una biblioteca header-only (opcionalmente compilable), escrita en C++11/14/17. Con razón se considera la más popular gracias a su velocidad ultrarrápida y mínimo consumo de memoria. spdlog admite registro asíncrono, lo que es especialmente importante para sistemas de alta carga.

Características principales:

  • Seguridad en subprocesos lista para usar.
  • Múltiples sinks: de archivo, consola, syslog, archivos rotativos, archivos diarios.
  • Soporte para formateadores personalizados (basados en fmtlib).
  • Modo asíncrono con cola de mensajes.
  • Registro condicional.

Ejemplo de uso:

#include "spdlog/spdlog.h"#include "spdlog/sinks/basic_file_sink.h"

int main() { // Creamos un logger que escribe en archivo auto file_logger = spdlog::basic_logger_mt("file_logger", "logs/app.log"); spdlog::set_default_logger(file_logger); spdlog::set_level(spdlog::level::debug);

// Registramos mensajes spdlog::info("Aplicación iniciada"); spdlog::warn("Comportamiento sospechoso detectado: {}", 42); spdlog::error("Error crítico: {}", errno);

// Registro asíncrono spdlog::flush_every(std::chrono::seconds(3)); return 0;}

Cuándo elegirlo: para proyectos modernos donde la velocidad es crítica. Ideal para juegos, servidores en tiempo real y sistemas embebidos.



2. Google glog — un estándar probado por el tiempo

Google glog (Google Logging Library) es una biblioteca desarrollada por Google para necesidades internas. Es simple, confiable y se utiliza en miles de proyectos en todo el mundo. glog no pretende ser el más rápido, pero proporciona todas las funciones necesarias para el registro en producción.

Características:

  • Rotación automática de registros por tamaño.
  • Niveles de registro: INFO, WARNING, ERROR, FATAL (con abort).
  • Registro condicional (LOG_IF, LOG_EVERY_N).
  • Soporte de pila de llamadas en errores fatales.
  • Dependencia mínima — solo pthreads.

Ejemplo de uso:

#include <glog/logging.h>

int main(int argc, char* argv[]) { google::InitGoogleLogging(argv[0]); FLAGS_log_dir = "./logs"; FLAGS_minloglevel = google::INFO;

LOG(INFO) << "Servidor iniciado en el puerto " << 8080; LOG(WARNING) <<

Recommendations