Je travaille sur une application multithread à performances critiques. J'ai regardé la journalisation rlog, Ace et Boost. J'ai choisi rlog parce que j'ai lu que c'était le 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 montre le nom du fichier, le numéro de ligne, etc. même en mode de libération. Si vous pouvez me dire comment désactiver ces informations, mon problème pourrait être résolu. Dans tous les cas, quel est le logger le plus efficace en C ++ pour ma situation?
Réponses:
Malheureusement, je ne peux pas voter pour le moment. Pour autant que je puisse dire, n'utilisez jamais de merde comme Apache log4cxx. Il contient de sérieux bugs.
À mon avis, vous devriez aller avec boost.
la source
On pense que Pantheios est la bibliothèque de journalisation C ++ la plus performante , et prétend être la seule à 100% de sécurité de type (voir cet article sur une bibliothèque associée expliquant pourquoi les bibliothèques basées sur printf () / iostream ne sont pas de type- sûr)
la source
J'ai eu du succès avec log4cxx à http://logging.apache.org/log4cxx/index.html . Il s'agit d'une version C ++ du célèbre enregistreur Log4j, facile à configurer via un fichier conf ou dans le code. La surcharge lorsqu'elle est désactivée est minime (appel de méthode et comparaison d'entiers).
Le modèle de sortie dans le journal est défini par un modèle de conversion qui peut être aussi simple que la date / heure et un message. Il gère également la limitation de la taille des fichiers, le survol, etc. Vous pouvez également configurer différents modèles pour diverses erreurs et sources.
la source
Voici comment vous pouvez désactiver les informations supplémentaires fournies par rlog (comme le nom de fichier, le numéro de ligne, etc.). Lorsque vous initialisez rlog dans votre
main()
fonction (ou ailleurs), vous pouvez effectuer les opérations suivantes:rlog::RLogInit(argc, argv); rlog::StdioNode slog (2, rlog::StdioNode::OutputColor); slog.subscribeTo( RLOG_CHANNEL("error") );
Le deuxième argument de
StdioNode
est que les indicateurs contrôlent la sortie. Consultez la documentation rlog (peut être générée avec Doxygen) pour la liste complète des drapeaux possibles. Celui de l'exemple ici fait que rlog colorie uniquement la sortie en fonction de la gravité, sans aucune autre information ajoutée.la source
Vous voudrez peut-être envisager le système de logog. logog offre exactement ce type de fonctionnalité mais il n'a pas les dépendances implicites de code dont dispose Pantheios. logog est thread-safe et permet un haut degré de contrôle sur les types de messages enregistrés à tout moment.
Je suis l'auteur et le mainteneur de logog, donc mon opinion est un peu biaisée. Mais j'ai examiné rlog, Pantheios et d'autres systèmes de journalisation avant de mettre en œuvre celui-ci.
https://github.com/johnwbyrd/logog .
la source
Une partie de la surcharge peut se produire dans vos macros / flux. Vous devez faire très attention à ne pas composer la chaîne en cours de journalisation lorsque la journalisation est désactivée.
L'utilisation intelligente des flux et de l'opérateur?: Vous permet de le faire, tout comme les macros.
la source
Poco a un bon support de journalisation ...
http://pocoproject.org/slides/110-Logging.pdf
la source
peut-être des panthéios
même si je ne sais pas si c'est sans fil ou non ...
la source
essayez la bibliothèque c-log, https://github.com/0xmalloc/c-log , une bibliothèque log rapide, stable et sûre pour les threads pour le langage C / C ++.
la source
#include <pthread.h>
...)