commit 15e355a619af3cd8c511e81c757360503dea4f7b
parent 0d7a8b4334b148c8eb29d08cb759fa6469727912
Author: Remy Noulin <loader2x@gmail.com>
Date: Tue, 14 Jul 2020 21:47:54 +0200
add log levels: emergency, alert, notice and debug
release/libsheepy.c | 64 ++++++++++++------
release/libsheepy.h | 183 +++++++++++++++++++++++++++++++++++++-------------
src/libsheepy.c | 64 ++++++++++++------
src/libsheepy.h | 183 +++++++++++++++++++++++++++++++++++++-------------
src/libsheepyCuTest.c | 54 ++++++++++++---
src/libsheepyTest.c | 54 ++++++++++++---
6 files changed, 448 insertions(+), 154 deletions(-)
Diffstat:
| M | release/libsheepy.c | | | 64 | ++++++++++++++++++++++++++++++++++++++++++---------------------- |
| M | release/libsheepy.h | | | 183 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------- |
| M | src/libsheepy.c | | | 64 | ++++++++++++++++++++++++++++++++++++++++++---------------------- |
| M | src/libsheepy.h | | | 183 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------- |
| M | src/libsheepyCuTest.c | | | 54 | +++++++++++++++++++++++++++++++++++++++++++++--------- |
| M | src/libsheepyTest.c | | | 54 | +++++++++++++++++++++++++++++++++++++++++++++--------- |
6 files changed, 448 insertions(+), 154 deletions(-)
diff --git a/release/libsheepy.c b/release/libsheepy.c
@@ -47,13 +47,17 @@ typedef enum { LOCALE_NORMAL, LOCALE_TURKIC, LOCALE_LITHUANIAN } localeType;
#include <ctype.h>
#include <sys/time.h>
#include <stdio.h>
+#if (!(__OpenBSD__ || __HAIKU__))
#include <ucontext.h>
+#endif
#include <libgen.h>
#include <inttypes.h>
#include <dirent.h>
#include <stdarg.h>
#include <errno.h>
+#if (!(__OpenBSD__ || __HAIKU__))
#include <wordexp.h>
+#endif
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
@@ -915,7 +919,7 @@ static bool _logToStdout = true;
// logging file 0 is stdout
static uint16_t _current_log_file = 1;
-static const char *log_tags[LOG_INVALID_MODE][LOG_INVALID+1] = { { "[CRITICAL] ", "[ERROR] ", "[WARNING] ", "[PASS] ", "[INFO] ", "[INVALID LOG LEVEL] "}, { "[!] ", "[*] ", "[-] ", "[>] ", "[+] ", "[~] " }, { "[!] ", "[*] ", "[-] ", "[>] ", "[+] ", "[~] " }, { "[!] ", "[*] ", "[-] ", "[>] ", "[+] ", "[~] " }, { "[!] ", "[*] ", "[-] ", "[>] ", "[+] ", "[~] " }, { "[!] ", "[*] ", "[-] ", "[>] ", "[+] ", "[~] " }, { "", "", "", "", "", "" }, { "[⛔]", "[✖ ]", "[⚠ ]", "[✔ ]", "[ℹ ]", "[☁ ]" }};
+static const char *log_tags[LOG_INVALID_MODE][LOG_INVALID+1] = {{"[EMERGENCY] ","[ALERT] ","[CRITICAL] ","[ERROR] ","[WARNING] ","[NOTICE] ","[PASS] ","[INFO] ","[DEBUG] ","[INVALID LOG LEVEL] "},{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{ "", "", "", "", "", "", "", "", "", "" },{ "[⛔]","[⛔]","[⛔]", "[✖ ]", "[⚠ ]", "[ℹ ]", "[✔ ]", "[ℹ ]", "[☁ ]", "[~~]" }};
//
static const char *LOG_DATE_FORMAT[LOG_INVALID_MODE] = { "%c\n", "CONCISE HAS NO DATE", "%y-%m-%d %H:%M:%S", "FUNC", "PROG", "%y-%m-%d %H:%M:%S", "VOID"};
@@ -1132,7 +1136,7 @@ void _pLog(int loglevel, const char *file, const char *func, int line, const cha
char buffer[lenS(msg) + MAX_MSG_LEN];
if (_current_log_file == 1 && !_logToStdout) {
- // log to stdout is disable and there are no log files
+ // log to stdout is disabled and there are no log files
return;
}
@@ -1170,25 +1174,39 @@ void _pLog(int loglevel, const char *file, const char *func, int line, const cha
}
// set console color for printing the tag
- switch (loglevel) {
- case LOG_CRITICAL:
- printf(BLD RED);
- break;
- case LOG_ERROR:
- printf(RED);
- break;
- case LOG_WARNING:
- printf(YLW);
- break;
- case LOG_INFO:
- printf(BLU);
- break;
- case LOG_PASS:
- printf(BLD GRN);
- break;
- case LOG_INVALID:
- printf(MGT);
- break;
+ if (_logToStdout) {
+ switch (loglevel) {
+ case LOG_EMERGENCY:
+ printf(BLD RED);
+ break;
+ case LOG_ALERT:
+ printf(BLD RED);
+ break;
+ case LOG_CRITICAL:
+ printf(BLD RED);
+ break;
+ case LOG_ERROR:
+ printf(RED);
+ break;
+ case LOG_WARNING:
+ printf(YLW);
+ break;
+ case LOG_NOTICE:
+ printf(BLU);
+ break;
+ case LOG_PASS:
+ printf(BLD GRN);
+ break;
+ case LOG_INFO:
+ printf(BLU);
+ break;
+ case LOG_DEBUG:
+ printf(BLD CYN);
+ break;
+ case LOG_INVALID:
+ printf(MGT);
+ break;
+ }
}
// long or short file path in VERBOSE mode
@@ -1238,7 +1256,9 @@ void _pLog(int loglevel, const char *file, const char *func, int line, const cha
fprintf(_logging_files[i], "%s", log_tags[tagSymbols][loglevel]);
}
- printf(RST);
+ if (_logToStdout) {
+ printf(RST);
+ }
/* logVar(_log_current_mode, "d"); */
/* puts(log_tags[_log_current_mode][loglevel]); */
diff --git a/release/libsheepy.h b/release/libsheepy.h
@@ -850,30 +850,25 @@ uint64_t shStopwatch(uint8_t op);
/**
* LOG LEVELS
- * TODO:
- * add levels:
- * EMERGENCY
- * ALERT
- * CRITICAL
- * ERROR
- * WARNING
- * NOTICE
- * PASS
- * INFO
- * DEBUG
- */
-#define LOG_CRITICAL 0
-#define LOG_ERROR 1
+ * Note: When adding log levels or modes, the log_tags array in libsheepy.c
+ * must be updated.
+ */
+#define LOG_EMERGENCY 0
+#define LOG_ALERT 1
+#define LOG_CRITICAL 2
+#define LOG_ERROR 3
#ifdef LOG_WARNING
#undef LOG_WARNING // conflict with syslog.h
#endif
-#define LOG_WARNING 2
+#define LOG_WARNING 4
+#define LOG_NOTICE 5
+#define LOG_PASS 6
#ifdef LOG_INFO
#undef LOG_INFO // conflict with syslog.h
#endif
-#define LOG_PASS 3
-#define LOG_INFO 4
-#define LOG_INVALID 5
+#define LOG_INFO 7
+#define LOG_DEBUG 8
+#define LOG_INVALID 9
#define LOG_MAX_LEVEL LOG_INVALID
/** getMaxLogLevel and setMaxLogLevel value disabling all logs */
@@ -984,42 +979,46 @@ bool openProgLogFile(void);
void _pLog(int, const char *, const char *, int, const char *, ...);
+#define logY(...) pLog(LOG_EMERGENCY, __VA_ARGS__)
+#define logA(...) pLog(LOG_ALERT, __VA_ARGS__)
+#define logC(...) pLog(LOG_CRITICAL, __VA_ARGS__)
+#define logE(...) pLog(LOG_ERROR, __VA_ARGS__)
+#define logW(...) pLog(LOG_WARNING, __VA_ARGS__)
+#define logN(...) pLog(LOG_NOTICE, __VA_ARGS__)
#define logP(...) pLog(LOG_PASS, __VA_ARGS__)
#define logI(...) pLog(LOG_INFO, __VA_ARGS__)
-#define logW(...) pLog(LOG_WARNING, __VA_ARGS__)
-#define logE(...) pLog(LOG_ERROR, __VA_ARGS__)
-#define logC(...) pLog(LOG_CRITICAL, __VA_ARGS__)
+#define logD(...) pLog(LOG_DEBUG, __VA_ARGS__)
/**
* log string and free
* Example:
- * logSP("The list: %s", catS("1", "2"));
+ * logSY("The list: %s", catS("1", "2"));
*/
-#define logSP(format, string) do {\
+#define logSY(format, string) do {\
char *libsheepyInternalString = string;\
- logP(format, libsheepyInternalString);\
+ logY(format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
/**
* log string and free
* Example:
- * logSI("The list: %s", catS("1", "2"));
+ * logSA("The list: %s", catS("1", "2"));
*/
-#define logSI(format, string) do {\
+#define logSA(format, string) do {\
char *libsheepyInternalString = string;\
- logI(format, libsheepyInternalString);\
+ logA(format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
/**
* log string and free
* Example:
- * logSW("The list: %s", catS("1", "2"));
+ * logSC("The list: %s", catS("1", "2"));
*/
-#define logSW(format, string) do {\
+#define logSC(format, string) do {\
char *libsheepyInternalString = string;\
- logW(format, libsheepyInternalString);\
+ logC(format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
@@ -1037,11 +1036,55 @@ void _pLog(int, const char *, const char *, int, const char *, ...);
/**
* log string and free
* Example:
- * logSC("The list: %s", catS("1", "2"));
+ * logSW("The list: %s", catS("1", "2"));
*/
-#define logSC(format, string) do {\
+#define logSW(format, string) do {\
char *libsheepyInternalString = string;\
- logC(format, libsheepyInternalString);\
+ logW(format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log string and free
+ * Example:
+ * logSN("The list: %s", catS("1", "2"));
+ */
+#define logSN(format, string) do {\
+ char *libsheepyInternalString = string;\
+ logN(format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log string and free
+ * Example:
+ * logSP("The list: %s", catS("1", "2"));
+ */
+#define logSP(format, string) do {\
+ char *libsheepyInternalString = string;\
+ logP(format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log string and free
+ * Example:
+ * logSI("The list: %s", catS("1", "2"));
+ */
+#define logSI(format, string) do {\
+ char *libsheepyInternalString = string;\
+ logI(format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log string and free
+ * Example:
+ * logSD("The list: %s", catS("1", "2"));
+ */
+#define logSD(format, string) do {\
+ char *libsheepyInternalString = string;\
+ logD(format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
@@ -1081,11 +1124,15 @@ extern uint64_t logMask;
*/
#define pLogMask(mask, level, ...) if ((mask) & logMask) pLog(level, __VA_ARGS__)
+#define logMY(mask, ...) pLogMask(mask, LOG_EMERGENCY, __VA_ARGS__)
+#define logMA(mask, ...) pLogMask(mask, LOG_ALERT, __VA_ARGS__)
+#define logMC(mask, ...) pLogMask(mask, LOG_CRITICAL, __VA_ARGS__)
+#define logME(mask, ...) pLogMask(mask, LOG_ERROR, __VA_ARGS__)
+#define logMW(mask, ...) pLogMask(mask, LOG_WARNING, __VA_ARGS__)
+#define logMN(mask, ...) pLogMask(mask, LOG_NOTICE, __VA_ARGS__)
#define logMP(mask, ...) pLogMask(mask, LOG_PASS, __VA_ARGS__)
#define logMI(mask, ...) pLogMask(mask, LOG_INFO, __VA_ARGS__)
-#define logMW(mask, ...) pLogMask(mask, LOG_WARNING, __VA_ARGS__)
-#define logME(mask, ...) pLogMask(mask, LOG_ERROR, __VA_ARGS__)
-#define logMC(mask, ...) pLogMask(mask, LOG_CRITICAL, __VA_ARGS__)
+#define logMD(mask, ...) pLogMask(mask, LOG_DEBUG, __VA_ARGS__)
// show log messages in mask
#define showLogsInMask(mask) logMask |= mask
@@ -1096,11 +1143,22 @@ extern uint64_t logMask;
/**
* log and mask string and then free
* Example:
- * logSMP("The list: %s", catS("1", "2"));
+ * logSMY("The list: %s", catS("1", "2"));
*/
-#define logSMP(mask, format, string) do {\
+#define logSMY(mask, format, string) do {\
char *libsheepyInternalString = string;\
- logMP(mask, format, libsheepyInternalString);\
+ logMY(mask, format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log and mask string and then free
+ * Example:
+ * logSMA("The list: %s", catS("1", "2"));
+ */
+#define logSMA(mask, format, string) do {\
+ char *libsheepyInternalString = string;\
+ logMA(mask, format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
@@ -1109,9 +1167,20 @@ extern uint64_t logMask;
* Example:
* logSMI("The list: %s", catS("1", "2"));
*/
-#define logSMI(mask, format, string) do {\
+#define logSMC(mask, format, string) do {\
char *libsheepyInternalString = string;\
- logMI(mask, format, libsheepyInternalString);\
+ logMC(mask, format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log and mask string and then free
+ * Example:
+ * logSME("The list: %s", catS("1", "2"));
+ */
+#define logSME(mask, format, string) do {\
+ char *libsheepyInternalString = string;\
+ logME(mask, format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
@@ -1129,11 +1198,22 @@ extern uint64_t logMask;
/**
* log and mask string and then free
* Example:
- * logSME("The list: %s", catS("1", "2"));
+ * logSMN("The list: %s", catS("1", "2"));
*/
-#define logSME(mask, format, string) do {\
+#define logSMN(mask, format, string) do {\
char *libsheepyInternalString = string;\
- logME(mask, format, libsheepyInternalString);\
+ logMN(mask, format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log and mask string and then free
+ * Example:
+ * logSMP("The list: %s", catS("1", "2"));
+ */
+#define logSMP(mask, format, string) do {\
+ char *libsheepyInternalString = string;\
+ logMP(mask, format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
@@ -1142,9 +1222,20 @@ extern uint64_t logMask;
* Example:
* logSMI("The list: %s", catS("1", "2"));
*/
-#define logSMC(mask, format, string) do {\
+#define logSMI(mask, format, string) do {\
char *libsheepyInternalString = string;\
- logMC(mask, format, libsheepyInternalString);\
+ logMI(mask, format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log and mask string and then free
+ * Example:
+ * logSMD("The list: %s", catS("1", "2"));
+ */
+#define logSMD(mask, format, string) do {\
+ char *libsheepyInternalString = string;\
+ logMD(mask, format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
diff --git a/src/libsheepy.c b/src/libsheepy.c
@@ -47,13 +47,17 @@ typedef enum { LOCALE_NORMAL, LOCALE_TURKIC, LOCALE_LITHUANIAN } localeType;
#include <ctype.h>
#include <sys/time.h>
#include <stdio.h>
+#if (!(__OpenBSD__ || __HAIKU__))
#include <ucontext.h>
+#endif
#include <libgen.h>
#include <inttypes.h>
#include <dirent.h>
#include <stdarg.h>
#include <errno.h>
+#if (!(__OpenBSD__ || __HAIKU__))
#include <wordexp.h>
+#endif
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
@@ -971,7 +975,7 @@ static bool _logToStdout = true;
// logging file 0 is stdout
static uint16_t _current_log_file = 1;
-static const char *log_tags[LOG_INVALID_MODE][LOG_INVALID+1] = { { "[CRITICAL] ", "[ERROR] ", "[WARNING] ", "[PASS] ", "[INFO] ", "[INVALID LOG LEVEL] "}, { "[!] ", "[*] ", "[-] ", "[>] ", "[+] ", "[~] " }, { "[!] ", "[*] ", "[-] ", "[>] ", "[+] ", "[~] " }, { "[!] ", "[*] ", "[-] ", "[>] ", "[+] ", "[~] " }, { "[!] ", "[*] ", "[-] ", "[>] ", "[+] ", "[~] " }, { "[!] ", "[*] ", "[-] ", "[>] ", "[+] ", "[~] " }, { "", "", "", "", "", "" }, { "[⛔]", "[✖ ]", "[⚠ ]", "[✔ ]", "[ℹ ]", "[☁ ]" }};
+static const char *log_tags[LOG_INVALID_MODE][LOG_INVALID+1] = {{"[EMERGENCY] ","[ALERT] ","[CRITICAL] ","[ERROR] ","[WARNING] ","[NOTICE] ","[PASS] ","[INFO] ","[DEBUG] ","[INVALID LOG LEVEL] "},{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{ "", "", "", "", "", "", "", "", "", "" },{ "[⛔]","[⛔]","[⛔]", "[✖ ]", "[⚠ ]", "[ℹ ]", "[✔ ]", "[ℹ ]", "[☁ ]", "[~~]" }};
//
static const char *LOG_DATE_FORMAT[LOG_INVALID_MODE] = { "%c\n", "CONCISE HAS NO DATE", "%y-%m-%d %H:%M:%S", "FUNC", "PROG", "%y-%m-%d %H:%M:%S", "VOID"};
@@ -1188,7 +1192,7 @@ void _pLog(int loglevel, const char *file, const char *func, int line, const cha
char buffer[lenS(msg) + MAX_MSG_LEN];
if (_current_log_file == 1 && !_logToStdout) {
- // log to stdout is disable and there are no log files
+ // log to stdout is disabled and there are no log files
return;
}
@@ -1226,25 +1230,39 @@ void _pLog(int loglevel, const char *file, const char *func, int line, const cha
}
// set console color for printing the tag
- switch (loglevel) {
- case LOG_CRITICAL:
- printf(BLD RED);
- break;
- case LOG_ERROR:
- printf(RED);
- break;
- case LOG_WARNING:
- printf(YLW);
- break;
- case LOG_INFO:
- printf(BLU);
- break;
- case LOG_PASS:
- printf(BLD GRN);
- break;
- case LOG_INVALID:
- printf(MGT);
- break;
+ if (_logToStdout) {
+ switch (loglevel) {
+ case LOG_EMERGENCY:
+ printf(BLD RED);
+ break;
+ case LOG_ALERT:
+ printf(BLD RED);
+ break;
+ case LOG_CRITICAL:
+ printf(BLD RED);
+ break;
+ case LOG_ERROR:
+ printf(RED);
+ break;
+ case LOG_WARNING:
+ printf(YLW);
+ break;
+ case LOG_NOTICE:
+ printf(BLU);
+ break;
+ case LOG_PASS:
+ printf(BLD GRN);
+ break;
+ case LOG_INFO:
+ printf(BLU);
+ break;
+ case LOG_DEBUG:
+ printf(BLD CYN);
+ break;
+ case LOG_INVALID:
+ printf(MGT);
+ break;
+ }
}
// long or short file path in VERBOSE mode
@@ -1294,7 +1312,9 @@ void _pLog(int loglevel, const char *file, const char *func, int line, const cha
fprintf(_logging_files[i], "%s", log_tags[tagSymbols][loglevel]);
}
- printf(RST);
+ if (_logToStdout) {
+ printf(RST);
+ }
/* logVar(_log_current_mode, "d"); */
/* puts(log_tags[_log_current_mode][loglevel]); */
diff --git a/src/libsheepy.h b/src/libsheepy.h
@@ -850,30 +850,25 @@ uint64_t shStopwatch(uint8_t op);
/**
* LOG LEVELS
- * TODO:
- * add levels:
- * EMERGENCY
- * ALERT
- * CRITICAL
- * ERROR
- * WARNING
- * NOTICE
- * PASS
- * INFO
- * DEBUG
- */
-#define LOG_CRITICAL 0
-#define LOG_ERROR 1
+ * Note: When adding log levels or modes, the log_tags array in libsheepy.c
+ * must be updated.
+ */
+#define LOG_EMERGENCY 0
+#define LOG_ALERT 1
+#define LOG_CRITICAL 2
+#define LOG_ERROR 3
#ifdef LOG_WARNING
#undef LOG_WARNING // conflict with syslog.h
#endif
-#define LOG_WARNING 2
+#define LOG_WARNING 4
+#define LOG_NOTICE 5
+#define LOG_PASS 6
#ifdef LOG_INFO
#undef LOG_INFO // conflict with syslog.h
#endif
-#define LOG_PASS 3
-#define LOG_INFO 4
-#define LOG_INVALID 5
+#define LOG_INFO 7
+#define LOG_DEBUG 8
+#define LOG_INVALID 9
#define LOG_MAX_LEVEL LOG_INVALID
/** getMaxLogLevel and setMaxLogLevel value disabling all logs */
@@ -984,42 +979,46 @@ bool openProgLogFile(void);
void _pLog(int, const char *, const char *, int, const char *, ...);
+#define logY(...) pLog(LOG_EMERGENCY, __VA_ARGS__)
+#define logA(...) pLog(LOG_ALERT, __VA_ARGS__)
+#define logC(...) pLog(LOG_CRITICAL, __VA_ARGS__)
+#define logE(...) pLog(LOG_ERROR, __VA_ARGS__)
+#define logW(...) pLog(LOG_WARNING, __VA_ARGS__)
+#define logN(...) pLog(LOG_NOTICE, __VA_ARGS__)
#define logP(...) pLog(LOG_PASS, __VA_ARGS__)
#define logI(...) pLog(LOG_INFO, __VA_ARGS__)
-#define logW(...) pLog(LOG_WARNING, __VA_ARGS__)
-#define logE(...) pLog(LOG_ERROR, __VA_ARGS__)
-#define logC(...) pLog(LOG_CRITICAL, __VA_ARGS__)
+#define logD(...) pLog(LOG_DEBUG, __VA_ARGS__)
/**
* log string and free
* Example:
- * logSP("The list: %s", catS("1", "2"));
+ * logSY("The list: %s", catS("1", "2"));
*/
-#define logSP(format, string) do {\
+#define logSY(format, string) do {\
char *libsheepyInternalString = string;\
- logP(format, libsheepyInternalString);\
+ logY(format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
/**
* log string and free
* Example:
- * logSI("The list: %s", catS("1", "2"));
+ * logSA("The list: %s", catS("1", "2"));
*/
-#define logSI(format, string) do {\
+#define logSA(format, string) do {\
char *libsheepyInternalString = string;\
- logI(format, libsheepyInternalString);\
+ logA(format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
/**
* log string and free
* Example:
- * logSW("The list: %s", catS("1", "2"));
+ * logSC("The list: %s", catS("1", "2"));
*/
-#define logSW(format, string) do {\
+#define logSC(format, string) do {\
char *libsheepyInternalString = string;\
- logW(format, libsheepyInternalString);\
+ logC(format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
@@ -1037,11 +1036,55 @@ void _pLog(int, const char *, const char *, int, const char *, ...);
/**
* log string and free
* Example:
- * logSC("The list: %s", catS("1", "2"));
+ * logSW("The list: %s", catS("1", "2"));
*/
-#define logSC(format, string) do {\
+#define logSW(format, string) do {\
char *libsheepyInternalString = string;\
- logC(format, libsheepyInternalString);\
+ logW(format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log string and free
+ * Example:
+ * logSN("The list: %s", catS("1", "2"));
+ */
+#define logSN(format, string) do {\
+ char *libsheepyInternalString = string;\
+ logN(format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log string and free
+ * Example:
+ * logSP("The list: %s", catS("1", "2"));
+ */
+#define logSP(format, string) do {\
+ char *libsheepyInternalString = string;\
+ logP(format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log string and free
+ * Example:
+ * logSI("The list: %s", catS("1", "2"));
+ */
+#define logSI(format, string) do {\
+ char *libsheepyInternalString = string;\
+ logI(format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log string and free
+ * Example:
+ * logSD("The list: %s", catS("1", "2"));
+ */
+#define logSD(format, string) do {\
+ char *libsheepyInternalString = string;\
+ logD(format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
@@ -1081,11 +1124,15 @@ extern uint64_t logMask;
*/
#define pLogMask(mask, level, ...) if ((mask) & logMask) pLog(level, __VA_ARGS__)
+#define logMY(mask, ...) pLogMask(mask, LOG_EMERGENCY, __VA_ARGS__)
+#define logMA(mask, ...) pLogMask(mask, LOG_ALERT, __VA_ARGS__)
+#define logMC(mask, ...) pLogMask(mask, LOG_CRITICAL, __VA_ARGS__)
+#define logME(mask, ...) pLogMask(mask, LOG_ERROR, __VA_ARGS__)
+#define logMW(mask, ...) pLogMask(mask, LOG_WARNING, __VA_ARGS__)
+#define logMN(mask, ...) pLogMask(mask, LOG_NOTICE, __VA_ARGS__)
#define logMP(mask, ...) pLogMask(mask, LOG_PASS, __VA_ARGS__)
#define logMI(mask, ...) pLogMask(mask, LOG_INFO, __VA_ARGS__)
-#define logMW(mask, ...) pLogMask(mask, LOG_WARNING, __VA_ARGS__)
-#define logME(mask, ...) pLogMask(mask, LOG_ERROR, __VA_ARGS__)
-#define logMC(mask, ...) pLogMask(mask, LOG_CRITICAL, __VA_ARGS__)
+#define logMD(mask, ...) pLogMask(mask, LOG_DEBUG, __VA_ARGS__)
// show log messages in mask
#define showLogsInMask(mask) logMask |= mask
@@ -1096,11 +1143,22 @@ extern uint64_t logMask;
/**
* log and mask string and then free
* Example:
- * logSMP("The list: %s", catS("1", "2"));
+ * logSMY("The list: %s", catS("1", "2"));
*/
-#define logSMP(mask, format, string) do {\
+#define logSMY(mask, format, string) do {\
char *libsheepyInternalString = string;\
- logMP(mask, format, libsheepyInternalString);\
+ logMY(mask, format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log and mask string and then free
+ * Example:
+ * logSMA("The list: %s", catS("1", "2"));
+ */
+#define logSMA(mask, format, string) do {\
+ char *libsheepyInternalString = string;\
+ logMA(mask, format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
@@ -1109,9 +1167,20 @@ extern uint64_t logMask;
* Example:
* logSMI("The list: %s", catS("1", "2"));
*/
-#define logSMI(mask, format, string) do {\
+#define logSMC(mask, format, string) do {\
char *libsheepyInternalString = string;\
- logMI(mask, format, libsheepyInternalString);\
+ logMC(mask, format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log and mask string and then free
+ * Example:
+ * logSME("The list: %s", catS("1", "2"));
+ */
+#define logSME(mask, format, string) do {\
+ char *libsheepyInternalString = string;\
+ logME(mask, format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
@@ -1129,11 +1198,22 @@ extern uint64_t logMask;
/**
* log and mask string and then free
* Example:
- * logSME("The list: %s", catS("1", "2"));
+ * logSMN("The list: %s", catS("1", "2"));
*/
-#define logSME(mask, format, string) do {\
+#define logSMN(mask, format, string) do {\
char *libsheepyInternalString = string;\
- logME(mask, format, libsheepyInternalString);\
+ logMN(mask, format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log and mask string and then free
+ * Example:
+ * logSMP("The list: %s", catS("1", "2"));
+ */
+#define logSMP(mask, format, string) do {\
+ char *libsheepyInternalString = string;\
+ logMP(mask, format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
@@ -1142,9 +1222,20 @@ extern uint64_t logMask;
* Example:
* logSMI("The list: %s", catS("1", "2"));
*/
-#define logSMC(mask, format, string) do {\
+#define logSMI(mask, format, string) do {\
char *libsheepyInternalString = string;\
- logMC(mask, format, libsheepyInternalString);\
+ logMI(mask, format, libsheepyInternalString);\
+ free(libsheepyInternalString);\
+ } while(0)
+
+/**
+ * log and mask string and then free
+ * Example:
+ * logSMD("The list: %s", catS("1", "2"));
+ */
+#define logSMD(mask, format, string) do {\
+ char *libsheepyInternalString = string;\
+ logMD(mask, format, libsheepyInternalString);\
free(libsheepyInternalString);\
} while(0)
diff --git a/src/libsheepyCuTest.c b/src/libsheepyCuTest.c
@@ -305,11 +305,15 @@ void _pLogT(CuTest *tc UNUSED) {
// default log mode
puts("Default mode");
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test\nmultiline");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test\nmultiline");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
pLog(-1, "pLog test");
@@ -317,88 +321,120 @@ void _pLogT(CuTest *tc UNUSED) {
// concise mode
puts("LOG_CONCISE mode");
setLogMode(LOG_CONCISE);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
// verbose mode
puts("LOG_VERBOSE mode");
setLogMode(LOG_VERBOSE);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
// date mode
puts("LOG_DATE mode");
setLogMode(LOG_DATE);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
// function mode
puts("LOG_FUNC mode");
setLogMode(LOG_FUNC);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
// program name mode
puts("LOG_PROG mode");
setLogMode(LOG_PROG);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
// program name and date mode
puts("LOG_PROGNDATE mode");
setLogMode(LOG_PROGNDATE);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
// void mode
puts("LOG_VOID mode");
setLogMode(LOG_VOID);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
// void mode
puts("LOG_UTF8 mode");
setLogMode(LOG_UTF8);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
diff --git a/src/libsheepyTest.c b/src/libsheepyTest.c
@@ -294,11 +294,15 @@ START_TEST(_pLogT)
// default log mode
puts("Default mode");
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test\nmultiline");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test\nmultiline");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
pLog(-1, "pLog test");
@@ -306,88 +310,120 @@ START_TEST(_pLogT)
// concise mode
puts("LOG_CONCISE mode");
setLogMode(LOG_CONCISE);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
// verbose mode
puts("LOG_VERBOSE mode");
setLogMode(LOG_VERBOSE);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
// date mode
puts("LOG_DATE mode");
setLogMode(LOG_DATE);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
// function mode
puts("LOG_FUNC mode");
setLogMode(LOG_FUNC);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
// program name mode
puts("LOG_PROG mode");
setLogMode(LOG_PROG);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
// program name and date mode
puts("LOG_PROGNDATE mode");
setLogMode(LOG_PROGNDATE);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
// void mode
puts("LOG_VOID mode");
setLogMode(LOG_VOID);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");
// void mode
puts("LOG_UTF8 mode");
setLogMode(LOG_UTF8);
+ pLog(LOG_EMERGENCY, "pLog test");
+ pLog(LOG_ALERT, "pLog test");
pLog(LOG_CRITICAL, "pLog test");
pLog(LOG_ERROR, "pLog test");
pLog(LOG_WARNING, "pLog test");
- pLog(LOG_INFO, "pLog test");
+ pLog(LOG_NOTICE, "pLog test");
pLog(LOG_PASS, "pLog test");
+ pLog(LOG_INFO, "pLog test");
+ pLog(LOG_DEBUG, "pLog test");
// invalid log level
pLog(LOG_INFO+20, "pLog test");