spdlog pour C++ : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que spdlog et pourquoi en a-t-on besoin ?

\n\n

spdlog est une bibliothèque de journalisation ultra-rapide, header-only pour C++, distribuée sous licence MIT. Sa principale caractéristique est une performance incroyable, obtenue grâce à l'écriture asynchrone, un nombre minimal d'allocations et l'utilisation des fonctionnalités modernes de C++11/14/17. Dans les benchmarks, spdlog est souvent 5 à 10 fois plus rapide que des bibliothèques comme glog ou Boost.Log.

\n\n

Pourquoi utiliser spdlog ? Dans toute application C++ non triviale, la journalisation n'est pas un luxe, mais une nécessité. Elle permet de :

\n
    \n
  • Déboguer les erreurs dans un environnement de production où il n'y a pas de débogueur.
  • \n
  • Suivre le flux d'exécution du programme (traçage).
  • \n
  • Analyser les performances (mesure du temps d'exécution de sections de code).
  • \n
  • Effectuer un audit de sécurité (enregistrement des tentatives de connexion, modifications de données).
  • \n
\n\n

spdlog fournit un système flexible : vous pouvez écrire des journaux dans la console, dans des fichiers (y compris avec rotation par taille ou par temps), dans le journal système (syslog), dans une base de données (via ODBC) ou même les envoyer sur le réseau. Le mode asynchrone est pris en charge, ce qui permet de ne pas bloquer le thread principal de l'application lors de l'écriture des journaux.

\n\n

Installation de spdlog

\n\n

Contrairement à Python, il n'existe pas de gestionnaire de paquets unique pour C++, mais il existe plusieurs méthodes standard pour installer spdlog.

\n\n

Méthode 1 : Header-only (recommandé pour commencer)

\n

La méthode la plus simple consiste à télécharger les fichiers d'en-tête et à les inclure simplement dans votre projet. Aucune compilation n'est nécessaire.

\n
    \n
  1. Téléchargez la dernière version depuis GitHub.
  2. \n
  3. Décompressez l'archive.
  4. \n
  5. Copiez le dossier include/spdlog dans votre projet.
  6. \n
  7. Dans le code, utilisez #include "spdlog/spdlog.h".
  8. \n
\n\n

Méthode 2 : Via le gestionnaire de paquets vcpkg

\n

vcpkg est un gestionnaire de paquets populaire pour C++ de Microsoft.

\n
# Installation\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh  # ou bootstrap-vcpkg.bat sur Windows\n./vcpkg install spdlog\n\n# Intégration avec votre système de build\n./vcpkg integrate install
\n\n

Méthode 3 : Via Conan

\n

Conan est un autre gestionnaire de paquets populaire.

\n
# Dans le fichier conanfile.txt\n[requires]\nspdlog/1.12.0\n\n[generators]\ncmake_find_package\n\n# Installation\nconan install . --build=missing
\n\n

Méthode 4 : CMake FetchContent (approche moderne)

\n

Si vous utilisez CMake, vous pouvez récupérer la bibliothèque directement depuis le dépôt :

\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# Dans votre cible\ntarget_link_libraries(my_app PRIVATE spdlog::spdlog)
\n\n

Démarrage rapide avec un exemple de code

\n\n

Écrivons un programme très simple qui affiche des journaux de différents niveaux dans la console et dans un fichier.

\n\n
#include "spdlog/spdlog.h"\n#include "spdlog/sinks/basic_file_sink.h"\n#include <memory>\n\nint main() {\n    // 1. Création d'un logger pour la console (par défaut en couleur)\n    auto console = spdlog::stdout_color_mt("console");\n\n    // 2. Création d'un logger pour le fichier\n    auto file_logger = spdlog::basic_logger_mt("file_logger", "logs/app.log");\n\n    // 3. Définition du niveau de journalisation (par défaut - trace)\n    spdlog::set_level(spdlog::level::trace);\n\n    // 4. Écriture de messages de différents niveaux\n    console->trace("Ceci est un message trace (niveau le plus détaillé)");\n    console->debug("Debug : valeur de la variable x = {}", 42);\n    console->info("Programme démarré avec succès");\n    console->warn("Avertissement : mémoire presque épuisée");\n    console->error("Erreur : impossible d'ouvrir le fichier");\n    console->critical("Crit                    

Recommendations