From e14c6bc3801be29eb5a64c813754b170a67d4956 Mon Sep 17 00:00:00 2001 From: justanothercatgirl Date: Sun, 2 Feb 2025 20:28:12 +0300 Subject: Added log header --- include/log.h | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 include/log.h (limited to 'include/log.h') diff --git a/include/log.h b/include/log.h new file mode 100644 index 0000000..59d2ed3 --- /dev/null +++ b/include/log.h @@ -0,0 +1,84 @@ +#pragma once + +#include +#include + +// ANSII colors +#define BLK "\x1b[30m" +#define RED "\x1b[31m" +#define GRN "\x1b[32m" +#define YLW "\x1b[33m" +#define BLU "\x1b[34m" +#define VIO "\x1b[35m" +#define CYN "\x1b[36m" +#define WHT "\x1b[37m" +// ANSII "Bright" colors +#define BBLK "\x1b[90m" +#define BRED "\x1b[91m" +#define BGRN "\x1b[92m" +#define BYLW "\x1b[93m" +#define BBLU "\x1b[94m" +#define BVIO "\x1b[95m" +#define BCYN "\x1b[96m" +#define BWHT "\x1b[97m" +// Reset sequence +#define NL "\n" +#define RST "\x1b[0m" +#define NLRST "\n\x1b[0m" + +// Naming convention: +// L[ |V|F|VF|P|PV] +// L stands for Log +// log-level is: DEBUG, INFO, WARN, ERR, CRIT +// V stands for Verbose: include information about location in source +// F stands for format: needed to have printf-style formatting +// P stands for perror + +#ifdef LOG_DEBUG +// Log debug +# define LDEBUG(msg) fputs("[DEBUG] " msg NL, stderr) +# define LDEBUGV(msg) fprintf(stderr, "[DEBUG %s:%i@%s] " msg NL, __FILE__, __LINE__, __func__) +# define LDEBUGF(fmt, ...) fprintf(stderr, "[DEBUG] " fmt NL, __VA_ARGS__) +# define LDEBUGVF(fmt, ...) fprintf(stderr, "[DEBUG %s:%i@%s] " fmt NL, __FILE__, __LINE__, __func__, __VA_ARGS__) +#else +# define LDEBUG(msg) +# define LDEBUGV(msg) +# define LDEBUGF(fmt, ...) +# define LDEBUGVF(fmt, ...) +#endif // LOG_DEBUG + +// Log info +#define LINFO(msg) fputs(WHT "[INFO] " msg NLRST, stderr) +#define LINFOV(msg) fprintf(stderr, WHT "[INFO %s:%i@%s] " msg NLRST, __FILE__, __LINE__, __func__) +#define LINFOF(fmt, ...) fprintf(stderr, WHT "[INFO] " fmt NLRST , __VA_ARGS__) +#define LINFOVF(fmt, ...) fprintf(stderr, WHT "[INFO %s:%i@%s] " fmt NLRST, __FILE__, __LINE__, __func__, __VA_ARGS__) + +// Log warning +#define LWARN(msg) fputs(YLW "[WARNING] " msg NLRST, stderr) +#define LWARNV(msg) fprintf(stderr, YLW "[WARNING %s:%i@%s] " msg NLRST, __FILE__, __LINE__, __func__) +#define LWARNF(fmt, ...) fprintf(stderr, YLW "[WARNING] " fmt NLRST, __VA_ARGS__) +#define LWARNVF(fmt, ...) fprintf(stderr, YLW "[WARNING %s:%i@%s] " fmt NLRST, __FILE__, __LINE__, __func__, __VA_ARGS__) +#define LWARNP(msg) do { fputs(YLW "[WARNING]", stderr); perror(msg); fputs(RST, stderr); } while (0) +#define LWARNPV(msg) do { fprintf(stderr, YLW "[WARNING %s:%i@%s] ", __FILE__, __LINE__, __func__); perror(msg); fputs(RST, stderr); } while(0) + +// Log error +#define LERR(msg) fputs(RED "[ERROR] " msg NLRST, stderr) +#define LERRV(msg) fprintf(stderr, RED "[ERROR %s:%i@%s] " msg NLRST, __FILE__, __LINE__, __func__) +#define LERRF(fmt, ...) fprintf(stderr, RED "[ERROR] " fmt NLRST, __VA_ARGS__) +#define LERRVF(fmt, ...) fprintf(stderr, RED "[ERROR %s:%i@%s] " fmt NLRST, __FILE__, __LINE__, __func__, __VA_ARGS__) +#define LERRP(msg) do { fputs(RED "[ERROR] ", stderr); perror(msg); fputs(RST, stderr); } while (0) +#define LERRPV(msg) do { fprintf(stderr, RED "[ERROR %s:%i@%s] ", __FILE__, __LINE__, __func__); perror(msg); fputs(RST, stderr); } while(0) + +// Log critical: log and abort with exit status `ex` +#define LCRIT(ex, msg) do { fputs(RED "[CRITICAL] " msg NLRST, stderr); exit(ex); } while (0) +#define LCRITV(ex, msg) do { fprintf(stderr, RED "[CRITICAL %s:%i@%s] " msg NLRST, __FILE__, __LINE__, __func__); exit(ex); } while (0) +#define LCRITF(ex, fmt, ...) do { fprintf(stderr, RED "[CRITICAL] " fmt NLRST, __VA_ARGS__); exit(ex); } while (0) +#define LCRITVF(ex, fmt, ...) do { fprintf(stderr, RED "[CRITICAL %s:%i@%s] " fmt NLRST, __FILE__, __LINE__, __func__, __VA_ARGS__); exit(ex); } while (0) +#define LCRITP(ex, msg) do { fputs(RED "[CRITICAL] ", stderr); perror(msg); fputs(NLRST, stderr); exit(ex); } while (0) +#define LCRITPV(ex, msg) do { fprintf(stderr, RED "[CRITICAL %s:%i@%s] ", __FILE__, __LINE__, __func__); perror(msg); fputs(NLRST, stderr); exit(ex); } while(0) + +// exit status already specified to EXIT_FAILURE +#define LFAIL(msg) do { fputs(RED "[CRITICAL] ", stderr); perror(msg); fputs(NLRST, stderr); exit(EXIT_FAILURE); } while (0) +#define LFAILV(msg) do { fprintf(stderr, RED "[CRITICAL %s:%i@%s] ", __FILE__, __LINE__, __func__); perror(msg); fputs(NLRST, stderr); exit(EXIT_FAILURE); } while(0) + + -- cgit v1.2.3-70-g09d2