Registro en C++: revisión de las 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 una de las herramientas más importantes en el arsenal del desarrollador. Ayuda a rastrear la ejecución del programa, encontrar errores, analizar el rendimiento y recopilar datos para la depuración. En el lenguaje C++ no hay un sistema de registro incorporado (a diferencia de Java o Python), pero la comunidad y las grandes empresas han creado muchas bibliotecas excelentes. En este artículo, revisaremos las mejores soluciones para el registro en C++: spdlog, Boost.Log, Google glog y fmtlog. Conocerás sus características, ventajas y obtendrás ejemplos de código.



¿Por qué es necesario el registro en C++?

En los proyectos modernos de C++, el registro resuelve varias tareas:

  • Depuración: registro de valores de variables, pila de llamadas, estado de objetos.
  • Monitoreo: registro del tiempo de ejecución de funciones, operaciones de entrada/salida.
  • Auditoría: almacenamiento del historial de acciones del usuario o del sistema.
  • Diagnóstico de fallos: registro de excepciones y errores críticos.

Una buena biblioteca de registro debe ser rápida, flexible, admitir diferentes niveles de registro (debug, info, warn, error, fatal) y poder enviar datos a un archivo, consola o servidor remoto.



1. spdlog — registrador rápido y moderno

spdlog es la biblioteca de registro más popular para C++ en la actualidad. Está escrita en C++ moderno (C++11/14/17), es header-only (solo archivos de encabezado) y no tiene dependencias externas, excepto fmtlib para el formateo de cadenas. Principales ventajas:

  • Alto rendimiento (registro asíncrono).
  • Soporte para múltiples sinks: archivo, consola, syslog, bases de datos.
  • Configuración flexible del formato.
  • API simple.

Ejemplo de uso de spdlog:

#include <spdlog/spdlog.h>#include <spdlog/sinks/basic_file_sink.h>

int main() { // Creamos un registrador que escribe en el archivo "logs.txt" auto logger = spdlog::basic_logger_mt("file_logger", "logs.txt"); spdlog::set_default_logger(logger); spdlog::set_level(spdlog::level::debug); // Nivel de registro

spdlog::info("¡Bienvenido a spdlog!"); spdlog::debug("Mensaje de depuración: {}", 42); spdlog::error("Error ocurrido: {}", errno);

// Registro asíncrono spdlog::flush_on(spdlog::level::err); return 0;}

spdlog también admite el modo asíncrono, lo cual es crítico para aplicaciones de alta carga. La configuración de la asincronía es trivial: basta con llamar a spdlog::init_thread_pool(...).



2. Boost.Log — potente pero pesado

Boost.Log forma parte de las bibliotecas Boost. Es la solución más funcional, pero requiere instalar Boost y puede ralentizar la compilación. Características:

  • Máxima flexibilidad: filtros personalizados, formateadores, sinks.
  • Soporte para subprocesamiento múltiple y seguridad en concurrencia.
  • Posibilidad de escribir registros en diferentes lugares simultáneamente (archivo + consola + red).
  • Soporte para rotación de registros por tamaño, fecha u hora.

Ejemplo de Boost.Log:

#include <boost/log/trivial.hpp>#include <boost/log/expressions.hpp>#include <boost/log/utility/setup/file.hpp>

namespace logging = boost::log;

int main() { // Configuración de salida a archivo logging::add_file_log("sample.log"); logging::core::get()->set_filter( logging::trivial::severity >= logging::trivial::info );

BOOST_LOG_TRIVIAL(trace) << "Un mensaje de nivel trace"; BOOST_LOG_TRIVIAL(debug) << "Un mensaje de nivel debug"; BOOST_LOG_TRIVIAL(error) << "Un mensaje de nivel error"; return 0;}

Boost.Log es una ele

Recommendations