commit ed1ca93cc304623a7ed8e397ff0062e8f277f453
parent d237bbe52df14b068b0948ff7d099ac47b4e0c63
Author: quantumish <freifeld.david@gmail.com>
Date: Sun, 9 Apr 2023 01:08:50 -0700
Add logging utilities
Diffstat:
3 files changed, 85 insertions(+), 0 deletions(-)
diff --git a/http.c b/http.c
@@ -16,6 +16,7 @@
#include <zlib.h>
+#include "utils/log.h"
#include "utils/time.h"
#include "utils/shitvec.h"
#include "http/response.h"
@@ -128,6 +129,13 @@ void* handle_conn(void* ctxt) {
}
int main() {
+ log_trace("am i ever gonna use this");
+ log_debug("%d too many errors", 1);
+ log_info("uhhh hi %s", "world");
+ log_warn("listen here %s", "buckaroo");
+ log_error("that wasn't good");
+ log_fatal("AAAAAA");
+
int s = socket(AF_INET, SOCK_STREAM, 0);
if (s == -1) die("socket");
diff --git a/utils/log.c b/utils/log.c
@@ -0,0 +1,55 @@
+#include <stdio.h>
+#include <stdarg.h>
+#include <time.h>
+
+#include "log.h"
+
+#define LOG_MAX_MSGLEN 128
+
+#define ANSI_RED "\x1b[31m"
+#define ANSI_BOLDRED "\x1b[1;31m"
+#define ANSI_GREY "\x1b[38;5;239m"
+#define ANSI_YELLOW "\x1b[33m"
+#define ANSI_GREEN "\x1b[32m"
+#define ANSI_CYAN "\x1b[36m"
+#define ANSI_MAGENTA "\x1b[36m"
+#define ANSI_RESET "\x1b[0m"
+
+char* lvl_to_color(enum log_level lvl) {
+ switch (lvl) {
+ case LOG_TRACE:
+ return ANSI_MAGENTA;
+ case LOG_DEBUG:
+ return ANSI_GREEN;
+ case LOG_INFO:
+ return ANSI_CYAN;
+ case LOG_WARN:
+ return ANSI_YELLOW;
+ case LOG_ERROR:
+ return ANSI_RED;
+ case LOG_FATAL:
+ return ANSI_BOLDRED;
+ }
+}
+
+size_t log_min_level = 0;
+
+void log_msg(enum log_level lvl, char* lvl_name, char* fmt, ...) {
+ if (lvl < log_min_level) return;
+
+ char msg[LOG_MAX_MSGLEN];
+
+ va_list args;
+ va_start(args, fmt);
+ vsprintf(msg, fmt, args);
+
+ time_t now = time(0);
+ struct tm* local = localtime(&now);
+
+ char* lvl_color = lvl_to_color(lvl);
+
+ printf(ANSI_GREY "%02d/%02d/%02d %02d:%02d:%02d %s%s" ANSI_RESET ": %s\n",
+ local->tm_mon, local->tm_mday, local->tm_year,
+ local->tm_hour, local->tm_min, local->tm_sec,
+ lvl_color, lvl_name, msg);
+}
diff --git a/utils/log.h b/utils/log.h
@@ -0,0 +1,22 @@
+#ifndef LOG_H
+#define LOG_H
+
+enum log_level {
+ LOG_TRACE,
+ LOG_DEBUG,
+ LOG_INFO,
+ LOG_WARN,
+ LOG_ERROR,
+ LOG_FATAL
+};
+
+void log_msg(enum log_level lvl, char* lvl_name, char* fmt, ...);
+#define VA_ARGS(...) , ##__VA_ARGS__
+#define log_trace(fmt, ...) log_msg(LOG_TRACE, "TRACE", fmt, ##__VA_ARGS__)
+#define log_debug(fmt, ...) log_msg(LOG_DEBUG, "DEBUG", fmt, ##__VA_ARGS__)
+#define log_info(fmt, ...) log_msg(LOG_INFO, "INFO", fmt, ##__VA_ARGS__)
+#define log_warn(fmt, ...) log_msg(LOG_WARN, "WARN", fmt, ##__VA_ARGS__)
+#define log_error(fmt, ...) log_msg(LOG_ERROR, "ERROR", fmt, ##__VA_ARGS__)
+#define log_fatal(fmt, ...) log_msg(LOG_FATAL, "FATAL", fmt, ##__VA_ARGS__)
+
+#endif