diff options
-rw-r--r-- | include/ouroboros/logs.h | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/include/ouroboros/logs.h b/include/ouroboros/logs.h index ed7c7f8c..4767a6f6 100644 --- a/include/ouroboros/logs.h +++ b/include/ouroboros/logs.h @@ -3,8 +3,9 @@ * * Logging facilities * - * Sander Vrijders <sander.vrijders@intec.ugent.be> + * Sander Vrijders <sander.vrijders@intec.ugent.be> * Francesco Salvestrini <f.salvestrini@nextworks.it> + * Dimitri Staessens <dimitri.staessens@intec.ugent.be> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -26,6 +27,7 @@ #include <unistd.h> #include <stdio.h> +#include <stdbool.h> #ifndef OUROBOROS_PREFIX #error You must define OUROBOROS_PREFIX before including this file @@ -48,38 +50,39 @@ void close_logfile(void); extern FILE * logfile; -#define __LOG(CLR, LVL, FMT, ARGS...) \ +#define __LOG(CLR, FUNC, LVL, ...) \ do { \ if (logfile != NULL) { \ - fprintf(logfile, \ - OUROBOROS_PREFIX "(" LVL "): " \ - FMT ANSI_COLOR_RESET "\n", ##ARGS); \ + fprintf(logfile, OUROBOROS_PREFIX); \ + fprintf(logfile, "(" LVL "): "); \ + if (FUNC) \ + fprintf(logfile, "%s: ", __FUNCTION__); \ + fprintf(logfile, __VA_ARGS__); \ + fprintf(logfile, "\n"); \ fflush(logfile); \ } else { \ - printf(CLR "==%05d== " \ - OUROBOROS_PREFIX "(" LVL "): " \ - FMT ANSI_COLOR_RESET "\n", getpid(), \ - ##ARGS); \ + printf(CLR "==%05d== ", getpid()); \ + printf(OUROBOROS_PREFIX "(" LVL "): "); \ + if (FUNC) \ + printf("%s: ", __FUNCTION__); \ + printf(__VA_ARGS__); \ + printf(ANSI_COLOR_RESET "\n"); \ } \ } while (0) -#define LOG_ERR(FMT, ARGS...) __LOG(ANSI_COLOR_RED, \ - ERROR_CODE, FMT, ##ARGS) -#define LOG_WARN(FMT, ARGS...) __LOG(ANSI_COLOR_YELLOW, \ - WARN_CODE, FMT, ##ARGS) -#define LOG_INFO(FMT, ARGS...) __LOG(ANSI_COLOR_GREEN, \ - INFO_CODE, FMT, ##ARGS) -#define LOG_NI(FMT, ARGS...) __LOG(ANSI_COLOR_BLUE, \ - IMPL_CODE, FMT, ##ARGS) +#define LOG_ERR(...) __LOG(ANSI_COLOR_RED, false, ERROR_CODE, __VA_ARGS__) +#define LOG_WARN(...) __LOG(ANSI_COLOR_YELLOW, false, WARN_CODE, __VA_ARGS__) +#define LOG_INFO(...) __LOG(ANSI_COLOR_GREEN, false, INFO_CODE, __VA_ARGS__) +#define LOG_NI(...) __LOG(ANSI_COLOR_BLUE, false, IMPL_CODE, __VA_ARGS__) #ifdef CONFIG_OUROBOROS_DEBUG -#define LOG_DBG(FMT, ARGS...) __LOG("", DEBUG_CODE, FMT, ##ARGS) +#define LOG_DBG(...) __LOG("", false, DEBUG_CODE, __VA_ARGS__) +#define LOG_DBGF(...) __LOG("", true, DEBUG_CODE, __VA_ARGS__) #else -#define LOG_DBG(FMT, ARGS...) do { } while (0) +#define LOG_DBG(...) do { } while (0) +#define LOG_DBGF(...) do { } while (0) #endif -#define LOG_DBGF(FMT, ARGS...) LOG_DBG("%s: " FMT, __FUNCTION__, ##ARGS) - #define LOG_MISSING LOG_NI("Missing code in %s:%d",__FILE__, __LINE__) #endif |