bunkum

an old and silly c99 web server with some fun features
Log | Files | Refs | README

commit ed1ca93cc304623a7ed8e397ff0062e8f277f453
parent d237bbe52df14b068b0948ff7d099ac47b4e0c63
Author: quantumish <freifeld.david@gmail.com>
Date:   Sun,  9 Apr 2023 01:08:50 -0700

Add logging utilities

Diffstat:
Mhttp.c | 8++++++++
Autils/log.c | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Autils/log.h | 22++++++++++++++++++++++
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