From 087328c3214b7411f19664ea2abb4d1dab4e5618 Mon Sep 17 00:00:00 2001 From: Al Date: Tue, 3 Mar 2015 12:38:10 -0500 Subject: [PATCH] [utils] logging --- src/log/log.h | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/log/log.h diff --git a/src/log/log.h b/src/log/log.h new file mode 100644 index 00000000..8cfca9b1 --- /dev/null +++ b/src/log/log.h @@ -0,0 +1,62 @@ +#ifndef LOG_H +#define LOG_H + +#include +#include +#include + +#define LOG_LEVEL_DEBUG 10 +#define LOG_LEVEL_INFO 20 +#define LOG_LEVEL_WARN 30 +#define LOG_LEVEL_ERROR 40 + +#ifndef LOG_LEVEL +#define LOG_LEVEL LOG_LEVEL_INFO +#endif + +#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) + +#if LOG_LEVEL > LOG_LEVEL_DEBUG +#define NO_DEBUG 1 +#endif + +#ifdef NO_DEBUG +/* compile with all debug messages removed */ +#define log_debug(M, ...) +#else +#ifdef LOG_NO_COLORS + #define log_debug(M, ...) fprintf(stderr, "DEBUG " M " at %s (%s:%d) \n", ##__VA_ARGS__, __func__, __FILE__, __LINE__) +#else + #define log_debug(M, ...) fprintf(stderr, "\33[34mDEBUG\33[39m " M " \33[90m at %s (%s:%d) \33[39m\n", ##__VA_ARGS__, __func__, __FILE__, __LINE__) +#endif /* NOCOLORS */ +#endif /* NDEBUG */ + +/* safe readable version of errno */ +#define clean_errno() (errno == 0 ? "None" : strerror(errno)) + +#ifdef LOG_NO_COLORS + #define log_error(M, ...) fprintf(stderr, "ERR " M " at %s (%s:%d) errno:%s\n", ##__VA_ARGS__, __func__, __FILE__, __LINE__, clean_errno()) + #define log_warn(M, ...) fprintf(stderr, "WARN " M " at %s (%s:%d) errno:%s\n", ##__VA_ARGS__, __func__, __FILE__, __LINE__, clean_errno()) + #define log_info(M, ...) fprintf(stderr, "INFO " M " at %s (%s:%d)\n", ##__VA_ARGS__, __func__, __FILENAME__, __LINE__) +#else + #define log_error(M, ...) fprintf(stderr, "\33[31mERR\33[39m " M " \33[90m at %s (%s:%d) \33[94merrno: %s\33[39m\n", ##__VA_ARGS__, __func__, __FILE__, __LINE__, clean_errno()) + #define log_warn(M, ...) fprintf(stderr, "\33[91mWARN\33[39m " M " \33[90m at %s (%s:%d) \33[94merrno: %s\33[39m\n", ##__VA_ARGS__, __func__, __FILE__, __LINE__, clean_errno()) + #define log_info(M, ...) fprintf(stderr, "\33[32mINFO\33[39m " M " \33[90m at %s (%s:%d) \33[39m\n", ##__VA_ARGS__, __func__, __FILENAME__, __LINE__) +#endif /* NOCOLORS */ + +#if LOG_LEVEL > LOG_LEVEL_INFO +#undef log_info +#define log_info(M, ...) +#endif + +#if LOG_LEVEL > LOG_LEVEL_WARN +#undef log_warn +#define log_warn(M, ...) +#endif + +#if LOG_LEVEL > LOG_LEVEL_ERROR +#undef log_error +#define log_error(M, ...) +#endif + +#endif \ No newline at end of file