85 votes

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?

34voto

kirsche40 Points 145

Malheureusement, je ne suis pas en mesure de voter en bas pour le moment. Aussi loin que je peux dire de ne plus jamais utiliser ce genre de conneries Apache log4cxx. Il contient des bogues sérieux.

  1. La dernière version de 0,9 branche est 0.9.7 et contient encore les fuites de mémoire parce que chaque classe avec les membres virtuels a rien de virtuel dtor.
  2. La dernière version 0.10.x a perdu beaucoup de functioality à partir de 0.9.x. Dans ce cas, il n'est pas compatible. Vous êtes obligé de réécrire une grande partie de votre propre code.
  3. L'ensemble du projet semble unmaintaned. La libération de 0,11.xx est annoncé depuis 2 ans.

À mon avis, vous devriez aller avec boost.

19voto

dcw Points 2181

Pantheios est pensé pour être la meilleure exécution C++ bibliothèque de journalisation, ainsi que prétendant être le seul qui est 100% type-safe (voir cet article à propos d'une relation avec les bibliothèques expliquant pourquoi printf()/iostream basé sur les bibliothèques ne sont pas de type-safe)

10voto

user54700 Points 91

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.

9voto

cassava Points 119

Voici comment vous pouvez é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() de la fonction (ou le bon), 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 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 supplémentaire.

9voto

johnwbyrd Points 318

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. 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.

http://www.logog.org .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X