À propos du projet
Quill est une bibliothèque de journalisation et de métriques asynchrone pour C++17 et versions ultérieures, destinée aux applications critiques en termes de performance et sensibles à la latence. Sa conception de base maintient le formatage et les E/S hors du thread appelant : les arguments de journalisation sont encodés sur le frontend et traités par un worker backend dédié, de sorte que le formatage coûteux se produit en dehors des chemins critiques.
Les capacités clés décrites dans le README :
- Traitement asynchrone : un thread d'arrière-plan gère le formatage et les E/S, gardant les threads d'application réactifs.
- Publication de métriques : des échantillons de métriques pré-enregistrés peuvent être envoyés via le même backend asynchrone. Un sink Prometheus intégré gère les compteurs, jauges, histogrammes et résumés, et des sinks personnalisés peuvent acheminer les échantillons vers StatsD, OpenTelemetry ou d'autres collecteurs dans le processus.
- Empreinte d'en-tête minimale : le frontend ne nécessite que Logger.h et LogMacros.h, tandis que le backend est inclus via un seul fichier .cpp, évitant l'injection de code backend dans d'autres unités de traduction.
- Options au moment de la compilation : les niveaux de journalisation peuvent être éliminés au moment de la compilation, et les files d'attente frontend et la politique de mémoire peuvent être ajustées au moment de la compilation.
- Configuration au moment de l'exécution : le comportement inactif du backend, l'affinité CPU, la mise en mémoire tampon, la gestion des horodatages, le vidage et les rappels peuvent être configurés, et les enregistreurs peuvent être composés à partir de sinks intégrés ou personnalisés avec des filtres par sink.
- Horodatages : prise en charge de rdtsc, chrono ou horloges personnalisées, avec comparaison d'horodatages entre threads et une fenêtre de grâce configurable pour les producteurs retardés.
- Sinks et sortie : console (avec couleur), fichiers (avec rotation), JSON, plus des sinks personnalisés.
- Fonctionnalités supplémentaires : journalisation de backtrace via un tampon en anneau, filtrage de journalisation, journalisation structurée JSON, contexte de diagnostic mappé (MDC), macros à limitation de débit, modes de file d'attente bornés/non bornés et bloquants/abandonnants configurables avec surveillance, gestion des crashs via un gestionnaire de signaux, prise en charge des grandes pages sur Linux, prise en charge des caractères larges sur Windows, et une option de construction sans exceptions.
- API type-safe basée sur la bibliothèque {fmt}.
L'installation est disponible via plusieurs gestionnaires de paquets, notamment vcpkg, Conan, Homebrew, Meson WrapDB, Conda, Bzlmod, xmake, nix et build2. Un chemin de démarrage rapide utilise simple_logger() pour la sortie console ou fichier, tandis qu'une configuration détaillée expose les API Backend et Frontend pour un contrôle explicite des sinks, enregistreurs et formateurs. Une API de fonction sans macro est également proposée, décrite comme légèrement plus lente que l'API macro.
Le README comprend des tableaux de benchmarks comparant Quill à d'autres bibliothèques de journalisation C++ dans des scénarios tels que la journalisation de nombres, de grandes chaînes et de types complexes, avec un et quatre threads. Ces résultats sont présentés avec une configuration système spécifique et une méthodologie de benchmark, et doivent être lus comme les mesures propres du projet plutôt qu'une vérification indépendante.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.