spdlog para C++: guía completa con ejemplos

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

¿Qué es spdlog y para qué sirve?

\n\n

spdlog es una biblioteca de logging para C++ ultrarrápida, solo de cabeceras (header-only), distribuida bajo la licencia MIT. Su principal característica es un rendimiento increíble, logrado gracias a la escritura asíncrona, la cantidad mínima de asignaciones y el uso de las capacidades modernas de C++11/14/17. En los benchmarks, spdlog suele ser de 5 a 10 veces más rápido que bibliotecas como glog o Boost.Log.

\n\n

¿Por qué usar spdlog? En cualquier aplicación C++ no trivial, el logging no es un lujo, sino una necesidad. Ayuda a:

\n
    \n
  • Depurar errores en un entorno de producción donde no hay depurador.
  • \n
  • Rastrear el flujo de ejecución del programa (trazabilidad).
  • \n
  • Analizar el rendimiento (medir el tiempo de ejecución de secciones de código).
  • \n
  • Realizar auditorías de seguridad (registrar intentos de inicio de sesión, cambios de datos).
  • \n
\n\n

spdlog proporciona un sistema flexible: puede escribir registros en la consola, en archivos (incluyendo rotación por tamaño o tiempo), en el registro del sistema (syslog), en una base de datos (a través de ODBC) o incluso enviarlos por red. Se admite el modo asíncrono, que permite no bloquear el hilo principal de la aplicación al escribir los registros.

\n\n

Instalación de spdlog

\n\n

A diferencia de Python, en C++ no hay un administrador de paquetes único, pero existen varias formas estándar de instalar spdlog.

\n\n

Método 1: Header-only (recomendado para empezar)

\n

La forma más sencilla es descargar los archivos de cabecera e incluirlos en su proyecto. No se requiere compilación.

\n
    \n
  1. Descargue la última versión desde GitHub.
  2. \n
  3. Descomprima el archivo.
  4. \n
  5. Copie la carpeta include/spdlog en su proyecto.
  6. \n
  7. En el código, use #include "spdlog/spdlog.h".
  8. \n
\n\n

Método 2: A través del gestor de paquetes vcpkg

\n

vcpkg es un popular gestor de paquetes para C++ de Microsoft.

\n
# Instalación\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh  # o bootstrap-vcpkg.bat en Windows\n./vcpkg install spdlog\n\n# Integración con su sistema de compilación\n./vcpkg integrate install
\n\n

Método 3: A través de Conan

\n

Conan es otro gestor de paquetes popular.

\n
# En el archivo conanfile.txt\n[requires]\nspdlog/1.12.0\n\n[generators]\ncmake_find_package\n\n# Instalación\nconan install . --build=missing
\n\n

Método 4: CMake FetchContent (enfoque moderno)

\n

Si usa CMake, puede obtener la biblioteca directamente desde el repositorio:

\n
include(FetchContent)\nFetchContent_Declare(\n  spdlog\n  GIT_REPOSITORY https://github.com/gabime/spdlog.git\n  GIT_TAG v1.12.0\n)\nFetchContent_MakeAvailable(spdlog)\n\n# En su target\ntarget_link_libraries(my_app PRIVATE spdlog::spdlog)
\n\n

Inicio rápido con un ejemplo de código

\n\n

Escribamos un programa simple que muestre registros de diferentes niveles en la consola y en un archivo.

\n\n
#include "spdlog/spdlog.h"\n#include "spdlog/sinks/basic_file_sink.h"\n#include <memory>\n\nint main() {\n    // 1. Creamos un logger para la consola (por defecto, a color)\n    auto console = spdlog::stdout_color_mt("console");\n\n    // 2. Creamos un logger para archivo\n    auto file_logger = spdlog::basic_logger_mt("file_logger", "logs/app.log");\n\n    // 3. Establecemos el nivel de logging (por defecto - trace)\n    spdlog::set_level(spdlog::level::trace);\n\n    // 4. Escribimos mensajes de diferentes niveles\n    console->trace("Este es un mensaje trace (el nivel más detallado)");\n    console->debug("Debug: el valor de la variable x = {}", 42);\n    console->info("Programa iniciado correctamente");\n    console->warn("Advertencia: la memoria está casi agotada");\n    console->error("Error: no se pudo abrir el archivo");\n    console->critical("Crí                    

Recommendations