Je connais beaucoup de bibliothèques de journalisation, mais je n'en ai pas testé beaucoup. (GoogleLog, Pantheios, le boost à venir :: bibliothèque de journaux ...)
Dans les jeux, en particulier dans les jeux multijoueurs et multithread à distance, la journalisation est vitale pour le débogage, même si vous supprimez tous les journaux à la fin.
Disons que je fais un jeu PC (pas une console) qui a besoin de journaux (multijoueur et multithread et / ou multiprocessus) et j'ai de bonnes raisons de chercher une bibliothèque pour la journalisation (comme, je n'ai pas le temps ou je suis pas confiant dans ma capacité à en écrire un correctement pour mon cas).
En supposant que j'ai besoin:
- performance
- facilité d'utilisation (autorisez le streaming ou le formatage ou quelque chose comme ça)
- fiable (ne fuit pas ou ne plante pas!)
- multiplateforme (au moins Windows, MacOSX, Linux / Ubuntu)
Quelle bibliothèque de journalisation recommanderiez-vous?
Actuellement, je pense que boost :: log est le plus flexible (vous pouvez même vous connecter à distance!), Mais n'a pas une bonne mise à jour des performances : est pour de hautes performances, mais n'est pas encore publié. Pantheios est souvent cité mais je n'ai pas de points de comparaison sur les performances et l'utilisation. J'ai utilisé ma propre librairie depuis longtemps mais je sais qu'elle ne gère pas le multithreading donc c'est un gros problème, même si c'est assez rapide. Google Log semble intéressant, j'ai juste besoin de le tester mais si vous avez déjà comparé ces bibliothèques et plus, vos conseils pourraient être utiles.
Les jeux sont souvent exigeants en termes de performances tout en étant complexes à déboguer.Il serait donc bon de connaître les bibliothèques de journalisation qui, dans notre cas spécifique, présentent des avantages évidents.
Réponses:
connectez-vous à l'aide de socket (n'importe quel wrapper de socket peut suffire) + navigateur web websocket => l'outil de journalisation le plus polyvalent et discret possible, gagnera des heures de débogage et évitera les yeux.
Maintenant, le bonus:
et bien d'autres tâches en dehors de la journalisation:
(presque tout ce qui précède peut être fait en utilisant des sockets flash, enregistrez les capacités de la base de données)
Maintenant, je sais que cela semble un peu long pour mettre en place la chose. Mais c'est vraiment un gain de temps sur un long projet, avec une situation de débogage difficile (comme dans les jeux.) C'est la chose la plus puissante que j'ai utilisée depuis les débogueurs ...
Remarque 1: le seul inconvénient => double effet secondaire lors du débogage du code de mise en réseau du jeu (impact sur la taille du buffer de socket, la latence, la bande passante, etc ...)
Remarque 2: certains navigateurs désactivés par la prise Web par défaut pour des raisons de sécurité, vérifiez: configurez les choses pour vous assurer qu'elles sont activées.
la source
En ce qui concerne les performances, j'ai trouvé templog à peu près invaincu. Il utilise des modèles d'expression pour différer l'évaluation des instructions de journalisation jusqu'à ce qu'il soit établi que les informations seront enregistrées. Comme vous pouvez également désactiver partiellement la journalisation (en fonction de la gravité, de l'origine et de l'audience cible d'un message de journal), certaines de ces instructions de journalisation peuvent être éliminées à zéro code par le compilateur pour les versions. (J'ai effectivement vu cela se produire avec VC.)
Il n'y a pas eu grand-chose à faire à la bibliothèque récemment, et d'autres sur SO ont trouvé le coffre manquant à certains égards, mais dans une entreprise pour laquelle je travaillais, nous avons trouvé le gars assez réactif, et l'un de mes vaches à l'époque était même a obtenu un accès de validation et y a ajouté du code, vous pourriez donc le trouver utile.
Pour énumérer vos besoins:
Le meilleur que j'ai trouvé. En particulier, sa capacité à exclure les messages de journal au moment de la compilation et à ce que le compilateur les élimine complètement était très attrayante.
Il y a les horribles messages d'erreur classiques du compilateur de trucs meta-meta lorsque vous faites quelque chose de mal, mais quand il s'agit de facilité d'utilisation, cela
est difficile à battre.
Cependant, vous devrez peut-être créer vos propres récepteurs de journaux (c'est là que les messages de journal vont), car les quelques pré-emballés (stderr, fichier, journalisation Windows, etc.) ne sont pas si sophistiqués. En raison de la performance étant un objectif principal, les éléments intrinsèques de l'ensemble sont quelque peu compliqués (comme les formateurs de messages de journal étant assez emmêlés avec les récepteurs de journaux), mais nous l'avons maîtrisé (je me souviens l'avoir traversé dans un débogueur pour y aider) et une fois compris qu'il n'était pas si difficile d'écrire vos propres formateurs de messages ou vos journaux.
Nous l'avons utilisé sans trouver de tels problèmes graves. Il n'y a pratiquement aucune allocation de mémoire dynamique, il est donc difficile d'imaginer même qu'il fasse quelque chose de mal. Bien sûr, nous ne l'avons testé que dans des conditions réelles dans un seul produit.
Lorsque nous l'avons utilisé, nous l'avons utilisé sur Win32, OSX et plusieurs distributions Linux différentes, dont Ubuntu.
En ce qui concerne le multi-threading: nous ne l'avons pas utilisé, mais d'après ce que je me souviens de l'architecture de la lib, il semble que vous n'auriez besoin de gérer cela que dans les récepteurs de journaux. ICBWT.
la source
Vous voudrez peut-être envisager la bibliothèque logog, à http://www.logog.org , qui, je pense, peut répondre à vos besoins. Avertissement: je l'ai écrit.
Voir également les réponses d'autres personnes sur /programming/696321/best-logging-framework-for-native-c .
la source
Vous pourriez être intéressé par l' ensemble d' outils baical :
la source