summaryrefslogtreecommitdiff
path: root/src/io/log.c
blob: ddf56ff807eca37837321df38cea054248a6fd79 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include "log.h"

#ifdef LOG

void logmsg(LogLevel level, const char* msg, ...) {
    
    INIT_LOG_BOUNDS
    INIT_LOG_BUFFER(buffer)

    time_t now = time(NULL);
    struct tm *tm = localtime(&now);
    APPEND(buffer, "\x1b[97m%02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec);

    switch (level) {
        case DEBUG:
            APPEND(buffer, "\x1b[%dm%s\x1b[97m ", 95, "DEBUG");
            break;
        case TRACE:
            APPEND(buffer, "\x1b[%dm%s\x1b[97m ", 96, "TRACE");
            break;
        case INFO:
            APPEND(buffer, "\x1b[%dm%s\x1b[97m ", 92, "INFO");
            break;
        case WARN:
            APPEND(buffer, "\x1b[%dm%s\x1b[97m ", 93, "WARN");
            break;
        case ERROR:
            APPEND(buffer, "\x1b[%dm%s\x1b[97m ", 91, "ERROR");
            break;
        break;
    }

    va_list valist;
    va_start(valist, msg);
    t += vsnprintf(buffer + t, BUF_LENGTH - t, msg, valist);
    va_end(valist);

    APPEND(buffer, "\n");

    fwrite(&buffer, t, 1, stdout);
}

#endif