AT&T IoT hackster.io contest Carpal2
Fork of Pubnub_c_core by
pubnub_log.h@3:5cd7590d8b9e, 2016-12-20 (annotated)
- Committer:
- cswiger
- Date:
- Tue Dec 20 16:38:16 2016 +0000
- Revision:
- 3:5cd7590d8b9e
- Parent:
- 0:d13755cfb705
Initial publish AT&T IoT Hackster.io contest CarPal2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sveljko | 0:d13755cfb705 | 1 | /* -*- c-file-style:"stroustrup"; indent-tabs-mode: nil -*- */ |
sveljko | 0:d13755cfb705 | 2 | #if !defined INC_PUBNUB_LOG |
sveljko | 0:d13755cfb705 | 3 | #define INC_PUBNUB_LOG |
sveljko | 0:d13755cfb705 | 4 | |
sveljko | 0:d13755cfb705 | 5 | |
sveljko | 0:d13755cfb705 | 6 | /** @file pubnub_log.h |
sveljko | 0:d13755cfb705 | 7 | This is the "Log" API of the Pubnub client library. |
sveljko | 0:d13755cfb705 | 8 | Designed for C-core's own use, but not restricted to it. |
sveljko | 0:d13755cfb705 | 9 | Provides a reasonably-well-featured, yet small and efficient |
sveljko | 0:d13755cfb705 | 10 | API for logging. |
sveljko | 0:d13755cfb705 | 11 | */ |
sveljko | 0:d13755cfb705 | 12 | |
sveljko | 0:d13755cfb705 | 13 | /** Available Log levels */ |
sveljko | 0:d13755cfb705 | 14 | enum pubnub_log_level { |
sveljko | 0:d13755cfb705 | 15 | /** Nothing is logged */ |
sveljko | 0:d13755cfb705 | 16 | PUBNUB_LOG_LEVEL_NONE, |
sveljko | 0:d13755cfb705 | 17 | /** Only Errors are logged */ |
sveljko | 0:d13755cfb705 | 18 | PUBNUB_LOG_LEVEL_ERROR, |
sveljko | 0:d13755cfb705 | 19 | /** Warnings (and errors) are logged */ |
sveljko | 0:d13755cfb705 | 20 | PUBNUB_LOG_LEVEL_WARNING, |
sveljko | 0:d13755cfb705 | 21 | /** Informational messages (and warnings and errors) are logged */ |
sveljko | 0:d13755cfb705 | 22 | PUBNUB_LOG_LEVEL_INFO, |
sveljko | 0:d13755cfb705 | 23 | /** Debugging messages (and info and warning and errors) are logged */ |
sveljko | 0:d13755cfb705 | 24 | PUBNUB_LOG_LEVEL_DEBUG, |
sveljko | 0:d13755cfb705 | 25 | /** Tracing messages (and debug and info and warning and errors) |
sveljko | 0:d13755cfb705 | 26 | * are logged */ |
sveljko | 0:d13755cfb705 | 27 | PUBNUB_LOG_LEVEL_TRACE |
sveljko | 0:d13755cfb705 | 28 | }; |
sveljko | 0:d13755cfb705 | 29 | |
sveljko | 0:d13755cfb705 | 30 | |
sveljko | 0:d13755cfb705 | 31 | #if !defined PUBNUB_LOG_LEVEL |
sveljko | 0:d13755cfb705 | 32 | /** User should define the log level to use, by defining the |
sveljko | 0:d13755cfb705 | 33 | `PUBNUB_LOG_LEVEL` symbol. If PUBNUB_LOG_LEVEL is not defined, |
sveljko | 0:d13755cfb705 | 34 | this default is used */ |
sveljko | 0:d13755cfb705 | 35 | #define PUBNUB_LOG_LEVEL PUBNUB_LOG_LEVEL_INFO |
sveljko | 0:d13755cfb705 | 36 | #endif |
sveljko | 0:d13755cfb705 | 37 | |
sveljko | 0:d13755cfb705 | 38 | #if !defined PUBNUB_LOG_PRINTF |
sveljko | 0:d13755cfb705 | 39 | #include <stdio.h> |
sveljko | 0:d13755cfb705 | 40 | /** User should define a printf-like function that will do the actual |
sveljko | 0:d13755cfb705 | 41 | logging. If it is not defined, we'll use printf(). |
sveljko | 0:d13755cfb705 | 42 | */ |
sveljko | 0:d13755cfb705 | 43 | #define PUBNUB_LOG_PRINTF(...) printf(__VA_ARGS__) |
sveljko | 0:d13755cfb705 | 44 | #endif |
sveljko | 0:d13755cfb705 | 45 | |
sveljko | 0:d13755cfb705 | 46 | /** Generic logging macro, logs to given @a LVL using a printf-like |
sveljko | 0:d13755cfb705 | 47 | interface |
sveljko | 0:d13755cfb705 | 48 | */ |
sveljko | 0:d13755cfb705 | 49 | #define PUBNUB_LOG(LVL, ...) do { if (LVL <= PUBNUB_LOG_LEVEL) PUBNUB_LOG_PRINTF(__VA_ARGS__); } while(0) |
sveljko | 0:d13755cfb705 | 50 | |
sveljko | 0:d13755cfb705 | 51 | /** Helper macro to log an error message */ |
sveljko | 0:d13755cfb705 | 52 | #define PUBNUB_LOG_ERROR(...) PUBNUB_LOG(PUBNUB_LOG_LEVEL_ERROR, __VA_ARGS__) |
sveljko | 0:d13755cfb705 | 53 | |
sveljko | 0:d13755cfb705 | 54 | /** Helper macro to log a warning message */ |
sveljko | 0:d13755cfb705 | 55 | #define PUBNUB_LOG_WARNING(...) PUBNUB_LOG(PUBNUB_LOG_LEVEL_WARNING, __VA_ARGS__) |
sveljko | 0:d13755cfb705 | 56 | |
sveljko | 0:d13755cfb705 | 57 | /** Helper macro to log an informational message */ |
sveljko | 0:d13755cfb705 | 58 | #define PUBNUB_LOG_INFO(...) PUBNUB_LOG(PUBNUB_LOG_LEVEL_INFO, __VA_ARGS__) |
sveljko | 0:d13755cfb705 | 59 | |
sveljko | 0:d13755cfb705 | 60 | /** Helper macro to log a debug message */ |
sveljko | 0:d13755cfb705 | 61 | #define PUBNUB_LOG_DEBUG(...) PUBNUB_LOG(PUBNUB_LOG_LEVEL_DEBUG, __VA_ARGS__) |
sveljko | 0:d13755cfb705 | 62 | |
sveljko | 0:d13755cfb705 | 63 | /** Helper macro to log a tracing message */ |
sveljko | 0:d13755cfb705 | 64 | #define PUBNUB_LOG_TRACE(...) PUBNUB_LOG(PUBNUB_LOG_LEVEL_TRACE, __VA_ARGS__) |
sveljko | 0:d13755cfb705 | 65 | |
sveljko | 0:d13755cfb705 | 66 | /** Generic macro to print a value of a (scalar) variable. |
sveljko | 0:d13755cfb705 | 67 | */ |
sveljko | 0:d13755cfb705 | 68 | #define WATCH_VAL(X,T,FMT) do { (void)(1?&X:(T*)0); PUBNUB_LOG(PUBNUB_LOG_LEVEL_DEBUG, __FILE__ "(%d) in %s: `" #X "` = " FMT "\n", __LINE__, __FUNCTION__, X); } while (0) |
sveljko | 0:d13755cfb705 | 69 | |
sveljko | 0:d13755cfb705 | 70 | /** Helper macro to "watch" an integer */ |
sveljko | 0:d13755cfb705 | 71 | #define WATCH_INT(X) WATCH_VAL(X, int, "%d") |
sveljko | 0:d13755cfb705 | 72 | |
sveljko | 0:d13755cfb705 | 73 | /** Helper macro to "watch" an unsigned integer */ |
sveljko | 0:d13755cfb705 | 74 | #define WATCH_UINT(X) WATCH_VAL(X, unsigned int, "%ud") |
sveljko | 0:d13755cfb705 | 75 | |
sveljko | 0:d13755cfb705 | 76 | /** Helper macro to "watch" a long */ |
sveljko | 0:d13755cfb705 | 77 | #define WATCH_LONG(X) WATCH_VAL(X, long, "%l") |
sveljko | 0:d13755cfb705 | 78 | |
sveljko | 0:d13755cfb705 | 79 | /** Helper macro to "watch" an unsigned long */ |
sveljko | 0:d13755cfb705 | 80 | #define WATCH_ULONG(X) WATCH_VAL(X, unsigned long, "%ul") |
sveljko | 0:d13755cfb705 | 81 | |
sveljko | 0:d13755cfb705 | 82 | /** Helper macro to "watch" a short */ |
sveljko | 0:d13755cfb705 | 83 | #define WATCH_SHORT(X) WATCH_VAL(X, short, "%d") |
sveljko | 0:d13755cfb705 | 84 | |
sveljko | 0:d13755cfb705 | 85 | /** Helper macro to "watch" an unsigned short */ |
sveljko | 0:d13755cfb705 | 86 | #define WATCH_USHORT(X) WATCH_VAL(X, unsigned short, "%ud") |
sveljko | 0:d13755cfb705 | 87 | |
sveljko | 0:d13755cfb705 | 88 | /** Helper macro to "watch" a char */ |
sveljko | 0:d13755cfb705 | 89 | #define WATCH_CHAR(X) WATCH_VAL(X, char, "%c") |
sveljko | 0:d13755cfb705 | 90 | |
sveljko | 0:d13755cfb705 | 91 | /** Helper macro to "watch" an unsigned char */ |
sveljko | 0:d13755cfb705 | 92 | #define WATCH_UCHAR(X) WATCH_VAL(X, unsigned char, "%uc") |
sveljko | 0:d13755cfb705 | 93 | |
sveljko | 0:d13755cfb705 | 94 | /** Helper macro to "watch" an enum like an integer.*/ |
sveljko | 0:d13755cfb705 | 95 | #define WATCH_ENUM(X) do { int x_ = (X); PUBNUB_LOG(PUBNUB_LOG_LEVEL_DEBUG, __FILE__ "(%d) in %s: `" #X "` = %d\n", __LINE__, __FUNCTION__, x_); } while (0) |
sveljko | 0:d13755cfb705 | 96 | |
sveljko | 0:d13755cfb705 | 97 | /** Helper macro to "watch" a string (char pointer) */ |
sveljko | 0:d13755cfb705 | 98 | #define WATCH_STR(X) do { char const*s_ = (X); PUBNUB_LOG(PUBNUB_LOG_LEVEL_DEBUG, __FILE__ "(%d) in %s: `" #X "` = '%s'\n", __LINE__, __FUNCTION__, s_); } while (0) |
sveljko | 0:d13755cfb705 | 99 | |
sveljko | 0:d13755cfb705 | 100 | /** Helper macro to "watch" an array of bytes */ |
sveljko | 0:d13755cfb705 | 101 | #define WATCH_BYTEARR(X) do { unsigned char const*ba_ = (X); PUBNUB_LOG(PUBNUB_LOG_LEVEL_DEBUG, __FILE__ "(%d) in %s: `" #X "` = '%s'\n", __LINE__, __FUNCTION__, s_); } while (0) |
sveljko | 0:d13755cfb705 | 102 | |
sveljko | 0:d13755cfb705 | 103 | |
sveljko | 0:d13755cfb705 | 104 | |
sveljko | 0:d13755cfb705 | 105 | #endif /*!defined INC_PUBNUB_LOG*/ |