Ich habe lange in Java gearbeitet, und ich wurde beauftragt, die log4j-Bibliothek für Protokolle zu verwenden. Es ist wunderbar, und jetzt, wo ich nach C ziehe, würde ich gerne herausfinden, ob es eine ähnliche Bibliothek für Protokolle in dieser Sprache gibt.
Bisher kenne ich die folgenden Bibliotheken für die Protokollierung: log4c, sclog4c, syslog, zlog.
log4c wurde erfunden, um ein Log4J für C zu sein. Wenn Sie speziell nach "etwas wie Log4J" suchen, weil Sie wollen, dass es wie "Log4J" aussieht, dann ist das wahrscheinlich das, was Sie " suche nach.
sclog4c wurde erfunden, um so einfach wie die am häufigsten verwendeten Funktionen von java.util.logging
zu sein - so einfach wie möglich. Wenn Sie "etwas wie Log4J" suchen, weil Sie möchten, dass es so klein und einfach wie möglich ist, ist dies wahrscheinlich das, was Sie suchen.
syslog wurde ursprünglich von Eric Allman als Teil von sendmail entwickelt und ist zum Defacto-Standard für Daemon / Server-Logging in POSIX-Umgebungen geworden. Es ist Client-Server-basiert, normalerweise sendet der Daemon, der etwas protokollieren möchte, die Protokolldaten an einen syslogd, der auf dem UDP-Port 514 horcht. Wenn Sie speziell nach "etwas wie Log4J" suchen, weil Sie tatsächlich einen Daemon oder Server protokollieren möchten, ist dies wahrscheinlich das, wonach Sie suchen.
Dieser wurde erfunden, um wie log4c zu sein, nur - gemäß seiner Beschreibung - kleiner und flexibler zugleich.
Wegen der unterschiedlichen Art, wie C verlinkt, denkt und arbeitet, würde ich nicht nach einem Logging-Framework suchen, das im Allgemeinen - im Gegensatz zu Java - leistungsfähig ist. Wenn Sie nach "ausgereiften Desktop-Anwendungen" und darüber hinaus suchen, ist die Protokollierung mit leistungsfähigen Frameworks wie in Java sicherlich ein guter Weg. Wenn Sie Kommandozeilen-Tools oder ähnliches implementieren, wette ich, dass Ein Lean Framework ist besser - warum sollten Sie sich nur für Logging von lib2xml abhängig machen ...
Bei Geschwindigkeit resp. Wenn Sie aus irgendeinem Grund keine Zyklen verschwenden, suchen Sie nach einem Protokollierungs-Framework, das Makros verwendet, um die Protokollierungsstufe auszuwerten, bevor die anderen Argumente ausgewertet werden.
Der Nachteil ist, dass Sie keine Protokollroutine mit Argumenten aufrufen können, die Nebenwirkungen haben. Aber das sollte sowieso kein Anwendungsfall sein. Es wäre verblüffend, wenn Log-Anweisungen wegen Nebeneffekten nicht zu ignorieren wären.
Der Vorteil ist, dass Log-Anweisungen in einem solchen Framework so wenige Zyklen hinzufügen, dass sie fast nicht vorhanden sind - nur ein Zugriff auf einen globalen, einen Check- und einen bedingten Zweig, den Rest des Log-Codes überspringend - 2 Anweisungen, 1 Zyklus im besten Fall auf vielen der heutigen CPUs.
Ich bin der Autor von sclog4c.
Eine weitere zu berücksichtigende Option ist zf_log :
Zum Beispiel wird das INFO-Log-Nachricht ausgegeben:
%Vor%Was wie folgt aussehen wird:
%Vor%Die genaue Darstellung ist konfigurierbar und hängt vom Build-Typ ab (Debug / Release).