The Pubnub C-core library. It's home is on https://github.com/pubnub/c_core, this is a copy

Dependents:   Pubnub_c_core_mbed2_pal Pubnub_c_core_mbed2_pal Pubnub_c_core_mbed2_pal2

Committer:
sveljko
Date:
Tue Nov 22 22:21:39 2016 +0000
Revision:
2:d85e42c1125d
Parent:
0:d13755cfb705
Added `pubnub_helper` module

Who changed what in which revision?

UserRevisionLine numberNew 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*/