Index

lognestmonster / c5334b7

A general-purpose single-header C logging library and parser for event-based logs. (Incomplete)

Latest Commit

{#}TimeHashSubjectAuthor#(+)(-)GPG?
20901 Dec 2020 11:43c5334b7UpdateJosh Stockin1590G

Blob @ lognestmonster / tests / macros.h

text/plain1308 bytesdownload raw
1#ifndef MACROS_H
2#define MACROS_H
3
4
5#include <stdio.h>
6#include <stdlib.h>
7#include <stdarg.h>
8#include <stdint.h>
9
10#include <sys/time.h>
11
12#define lnmCritical "CRITICAL"
13#define lnmError "ERROR"
14#define lnmWarn "WARN"
15#define lnmInfo "INFO"
16#define lnmDebug "DEBUG"
17#define lnmTrace "TRACE"
18
19#define lnm_line __LINE__
20#define lnm_file __FILE__
21#define lnm_func __func__
22
23
24uint64_t lnm_getus(void) {
25 uint64_t us;
26 struct timeval lnm_current_time;
27 gettimeofday(&lnm_current_time, NULL);
28 us = (lnm_current_time.tv_sec * 1000000ULL + lnm_current_time.tv_usec);
29 return us;
30}
31
32
33void log_print(FILE* logger, const char* verbosity, const char* format, ...) {
34 va_list args;
35 va_start(args, format);
36
37 // calculate buffer length
38 size_t buffer_size = vsnprintf(NULL, 0, format, args);
39 if (buffer_size > UINT16_MAX) {
40 printf("too big\n");
41 }
42 char* buffer = malloc(buffer_size + 1);
43 va_end(args);
44
45 // pass to vsnprintf
46 va_start(args, format);
47 vsnprintf(buffer, buffer_size + 1, format, args);
48 va_end(args);
49
50 uint64_t timestamp = lnm_getus();
51 fprintf(logger, "[%s] [%lu.%06lu] ", verbosity, timestamp/1000000, timestamp%1000000);
52
53 fputs(buffer, logger);
54 fputc('\n', logger);
55 free(buffer);
56}
57
58
59#endif // MACROS_H
60