Ich arbeite an einer leistungskritischen Multithread-Anwendung. Ich habe mir die Protokollierung von rlog, Ace und Boost angesehen. Ich habe mich für rlog entschieden, weil ich gelesen habe, dass es am schnellsten ist (wenn die Protokollierung deaktiviert ist, hat es den geringsten Overhead).
Das Problem, das ich habe, ist, dass der Dateiname, die Zeilennummer usw. auch im Freigabemodus angezeigt werden. Wenn Sie mir sagen können, wie ich diese Informationen ausschalten kann, ist mein Problem möglicherweise gelöst. Was ist auf jeden Fall der effizienteste Logger in C ++ für meine Situation?
Antworten:
Leider kann ich momentan nicht abstimmen. Soweit ich sagen kann, benutze niemals Mist wie Apache log4cxx. Es enthält schwerwiegende Fehler.
Meiner Meinung nach sollten Sie mit Boost gehen.
quelle
Pantheios gilt als die leistungsstärkste C ++ - Protokollierungsbibliothek und behauptet, die einzige zu sein, die zu 100% typsicher ist (siehe diesen Artikel über eine verwandte Bibliothek, in der erläutert wird, warum printf () / iostream-basierte Bibliotheken keine typbasierten Bibliotheken sind). sicher)
quelle
Ich hatte Erfolg mit log4cxx unter http://logging.apache.org/log4cxx/index.html . Es ist eine C ++ - Version des beliebten Log4j-Loggers, die entweder über eine conf-Datei oder im Code einfach zu konfigurieren ist. Der Overhead bei Deaktivierung ist minimal (Methodenaufruf und Ganzzahlvergleich).
Das Muster für die Ausgabe in das Protokoll wird durch ein Konvertierungsmuster definiert, das so einfach wie Datum / Uhrzeit und eine Nachricht sein kann. Es behandelt auch die Dateigrößenbeschränkung, den Rollover usw. Sie können auch verschiedene Muster für verschiedene Fehler und Quellen konfigurieren.
quelle
Hier erfahren Sie, wie Sie die zusätzlichen Informationen, die rlog bereitstellt (z. B. Dateiname, Zeilennummer usw.), deaktivieren können. Wenn Sie rlog in Ihrer
main()
Funktion (oder wo auch immer) initialisieren , können Sie Folgendes tun:Das zweite Argument
StdioNode
ist, dass Flags die Ausgabe steuern. Überprüfen Sie die rlog-Dokumentation (kann mit Doxygen generiert werden) auf die gesamte Liste möglicher Flags. Mit dem Beispiel hier färbt rlog die Ausgabe nur nach Schweregrad, ohne dass weitere Informationen hinzugefügt werden.quelle
Möglicherweise möchten Sie das Logog-System in Betracht ziehen. logog bietet genau diese Art von Funktionalität, weist jedoch nicht die impliziten Code-Abhängigkeiten auf, die Pantheios aufweist. logog ist threadsicher und ermöglicht ein hohes Maß an Kontrolle darüber, welche Arten von Nachrichten zu jedem Zeitpunkt protokolliert werden.
Ich bin der Autor und Betreuer von logog, daher ist meine Meinung etwas voreingenommen. Aber ich habe rlog, Pantheios und andere Protokollierungssysteme überprüft, bevor ich dieses implementiert habe.
https://github.com/johnwbyrd/logog .
quelle
Ein Teil des Overheads kann in Ihren Makros / Streams auftreten. Sie müssen sehr vorsichtig sein, um die zu protokollierende Zeichenfolge nicht zu erstellen, wenn die Protokollierung deaktiviert ist.
Durch die clevere Verwendung von Streams und dem Operator ?: Können Sie dies ebenso tun wie Makros.
quelle
Poco hat eine nette Protokollierungsunterstützung ...
http://pocoproject.org/slides/110-Logging.pdf
quelle
Vielleicht Pantheios,
obwohl ich nicht weiß, ob es threadsicher ist oder nicht ...
quelle
Probieren Sie die c-log lib https://github.com/0xmalloc/c-log aus , eine schnelle, stabile und threadsichere log lib für C / C ++.
quelle
#include <pthread.h>
...)