Quel est le plus efficace thread-safe C++ enregistreur?
Je suis en train de travailler sur une critique pour les performances application multi-thread. J'ai regardé rlog, Ace et de Stimuler l'enregistrement. J'ai choisi rlog parce que j'ai lu, c'est la manière la plus rapide (lorsque la journalisation est désactivée, il a le moins de frais généraux).
Le problème que j'ai est qu'il affiche le nom du fichier, le numéro de ligne etc. même en mode release. Si vous pouvez me dire comment faire pour fermer cette information, mon problème pourrait être résolu. En tout cas, ce qui est le plus efficace logger en C++ pour ma situation?
- Boost a une classe de log?
- Je suis rapidement venue à la conclusion que boost est tout. Même si ce n'est pas elle sont apparus lorsque vous regardez à nouveau!
- Je ne vois pas pourquoi c'est fermé. Il a demandé à un spécifique et mesurable question. Si nous négligeons ce compilateur est utilisé, il peut être un seul "plus efficace" thread-safe "C++ logger". Stackoverflow ces jours....
- Voir github.com/easylogging/easyloggingpp
- Voir aussi github.com/gabime/spdlog
Vous devez vous connecter pour publier un commentaire.
Malheureusement, je ne suis pas en mesure vers le bas de voter au moment. Aussi loin que je peux dire de ne plus jamais utiliser ce genre de conneries Apache log4cxx. Il contient des bogues sérieux.
À mon avis, vous devriez aller avec boost.
Pantheios est pensé pour être le meilleur exécution C++ bibliothèque de journalisation, ainsi que prétendant être le seul qui est 100% type-safe (voir cet article sur une relation avec les bibliothèques expliquant pourquoi printf()/iostream basé sur les bibliothèques ne sont pas de type-safe)
J'ai eu du succès avec log4cxx à http://logging.apache.org/log4cxx/index.html. C'est une version C++ de la populaire Log4j enregistreur, qui est facile à configurer via un fichier de conf ou dans le code. La surcharge lorsqu'il est désactivé, est minime (de l'appel de méthode et de comparaison d'entiers).
Le motif de la sortie du journal est défini par une conversion d'un modèle qui peut être aussi simple que de la date/de l'heure et un message. Il gère également la limitation de taille de fichier, de roulement, etc. Vous pouvez également configurer les différents modèles pour différentes erreurs et les sources.
Ici est de savoir comment vous pourriez éteindre l'information supplémentaire qui rlog donne (tels que le nom, le numéro de ligne etc.). Lorsque vous initialisez rlog dans votre
main()
fonction (ou bon), vous pouvez effectuer les opérations suivantes:Le deuxième argument de
StdioNode
est pour les drapeaux pour contrôler la sortie. De vérifier la rlog documentation (peut être générée par Doxygen) pour l'ensemble de la liste des indicateurs possibles.L'un dans l'exemple ici, rlog seulement la couleur, la sortie en fonction de la gravité, sans aucune autre information ajoutée.
Vous pouvez envisager de la logog système. logog offre exactement ce genre de fonctionnalité, mais il n'a pas le code implicite de dépendances qui Pantheios a. logog est thread-safe et il permet un haut degré de contrôle sur les types de messages sont enregistrés à tout moment.
Je suis logog de l'auteur et mainteneur, donc mon avis est un peu biaisé. Mais je ne l'ai revue rlog, Pantheios et d'autres systèmes d'enregistrement avant la mise en œuvre de celui-ci.
https://github.com/johnwbyrd/logog .
Le temps peut se produire dans vos macros/flux. Vous devez être très prudent de ne pas composer de la chaîne est enregistré lorsque la journalisation est désactivée.
L'utilisation intelligente des flux et ?: l'opérateur vous permet de le faire, comme le font les macros.
peut-être pantheios
si je ne sais pas si c'est thread-safe ou pas...
Poco a nice journalisation...
http://pocoproject.org/slides/110-Logging.pdf
essayer le c-log lib, https://github.com/0xmalloc/c-log, rapide ,stable et thread-safe journal lib pour le langage C/C++.
#include <pthread.h>
...)