In letzter Zeit bettele ich häufig Leistungsmessprotokolle ein und deaktiviere sie jedes Mal. Deshalb habe ich beschlossen, eine Bibliothek zu erstellen. Ich habe es so sehr gemacht, so ein Memorandum.
2017/4/23 Korrigiert, da es einen Unterschied in der Typdefinition und Konfiguration gab
Wenn Sie es mit einem printf-Bild verwenden, wird mit der Zeit ein Protokoll gespeichert. Das Protokoll wird nicht sofort bei Ausführung der Funktion ausgegeben, sondern im reservierten Speicher gespeichert und am Ende entladen.
Da es das Protokoll nicht jedes Mal ausspuckt, wenn der Prozess ausgeführt wird, spuckt es das Protokoll mit memcpy aus, sodass ich denke, dass es weniger Einfluss auf die Geschwindigkeit hat als das einfache Einfügen des Protokolls. Ich denke, dass es auf Anwendungsebene der Middleware ausreichend verwendet werden kann.
Die Grundlagen sind wie folgt.
timetestlog.h
void * timetestlog_init(char *delimiter, size_t maxloglen, unsigned long maxstoresize);
int timetestlog_store_printf(void * handle, const char *format, ...);
void timetestlog_exit(void * handle);
timetestlog_init: Initialisierungsfunktion - input --delimiter [in] Timestamp Es ist möglich, ein Trennzeichen zwischen Protokollen anzugeben. Wenn NULL, "". --maxloglen [in] Maximale Länge einer Ausgabeprotokollzeile. Protokolle, die länger als diese Länge sind, werden abgeschnitten. --maxstoresize [in] Maximale Anzahl der zu speichernden Protokolle. Mehr Protokolle als diese Nummer werden abgeschnitten. - return --Handle zur Verwendung in nachfolgenden APIs. NULL ist ein Fehler
timetestlog_store_printf: Protokollspeicherfunktion. Geben Sie einfach das von timetestlog_init erhaltene Handle im ersten Argument von printf an.
timetestlog_exit: Funktion beenden. Geben Sie das von timetestlog_init erhaltene Handle an.
Es ist unten auf Github aufgeführt. https://github.com/developer-kikikaikai/speedtest
Nach dem Klonen oder Herunterladen des Codes
cd speedtest/lib
make
Bauen mit. Libtimelog.so und libtimelog.a werden im selben Ordner erstellt.
Bestätigt für die Arbeit mit Ubuntu 14.04 Desktop 64bit Ich denke, es wird unter Linux funktionieren.
-Obwohl ich darauf achte, einen kleinen Overhead zu haben, wie z. B. nur bei init zuzuweisen, ist mir der Overhead für normale Funktionen wie va_start und memcpy egal.
Recommended Posts