forked from osmocom/wireshark
wslog: Add WS_DEBUG_HERE() macro
Add a LOG_LEVEL_ECHO that is always active and always non-fatal. Use that to implement a WS_DEBUG_HERE() macro for quick print outs during debugging sessions.
This commit is contained in:
parent
15fa09e5e3
commit
60533a55ff
|
@ -47,15 +47,16 @@
|
|||
* higher values.
|
||||
*/
|
||||
enum ws_log_level {
|
||||
LOG_LEVEL_NONE, /* not user facing */
|
||||
LOG_LEVEL_NOISY, /* extra verbose debugging */
|
||||
LOG_LEVEL_DEBUG, /* normal debugging level */
|
||||
LOG_LEVEL_INFO, /* chatty status but not debug */
|
||||
LOG_LEVEL_MESSAGE, /* default level, doesn't show file/function name */
|
||||
LOG_LEVEL_WARNING, /* can be set to fatal */
|
||||
LOG_LEVEL_CRITICAL, /* always enabled, can be set to fatal */
|
||||
LOG_LEVEL_ERROR, /* "error" is always fatal (aborts) */
|
||||
_LOG_LEVEL_LAST
|
||||
LOG_LEVEL_NONE, /* not user facing */
|
||||
LOG_LEVEL_NOISY, /* extra verbose debugging */
|
||||
LOG_LEVEL_DEBUG, /* normal debugging level */
|
||||
LOG_LEVEL_INFO, /* chatty status but not debug */
|
||||
LOG_LEVEL_MESSAGE, /* default level, doesn't show file/function name */
|
||||
LOG_LEVEL_WARNING, /* can be set to fatal */
|
||||
LOG_LEVEL_CRITICAL, /* always enabled, can be set to fatal */
|
||||
LOG_LEVEL_ERROR, /* "error" is always fatal (aborts) */
|
||||
LOG_LEVEL_ECHO, /* Always print message, never fatal */
|
||||
_LOG_LEVEL_LAST
|
||||
};
|
||||
|
||||
#endif /* __WS_LOG_DOMAINS_H__ */
|
||||
|
|
|
@ -127,6 +127,8 @@ const char *ws_log_level_to_string(enum ws_log_level level)
|
|||
switch (level) {
|
||||
case LOG_LEVEL_NONE:
|
||||
return "(zero)";
|
||||
case LOG_LEVEL_ECHO:
|
||||
return "ECHO";
|
||||
case LOG_LEVEL_ERROR:
|
||||
return "ERROR";
|
||||
case LOG_LEVEL_CRITICAL:
|
||||
|
@ -166,6 +168,8 @@ static enum ws_log_level string_to_log_level(const char *str_level)
|
|||
return LOG_LEVEL_CRITICAL;
|
||||
else if (g_ascii_strcasecmp(str_level, "error") == 0)
|
||||
return LOG_LEVEL_ERROR;
|
||||
else if (g_ascii_strcasecmp(str_level, "echo") == 0)
|
||||
return LOG_LEVEL_ECHO;
|
||||
else
|
||||
return LOG_LEVEL_NONE;
|
||||
}
|
||||
|
@ -284,12 +288,15 @@ enum ws_log_level ws_log_get_level(void)
|
|||
}
|
||||
|
||||
|
||||
void ws_log_set_level(enum ws_log_level level)
|
||||
enum ws_log_level ws_log_set_level(enum ws_log_level level)
|
||||
{
|
||||
if (level <= LOG_LEVEL_NONE || level >= _LOG_LEVEL_LAST)
|
||||
return;
|
||||
return LOG_LEVEL_NONE;
|
||||
if (level > LOG_LEVEL_CRITICAL)
|
||||
level = LOG_LEVEL_CRITICAL;
|
||||
|
||||
current_log_level = level;
|
||||
return current_log_level;
|
||||
}
|
||||
|
||||
|
||||
|
@ -298,11 +305,7 @@ enum ws_log_level ws_log_set_level_str(const char *str_level)
|
|||
enum ws_log_level level;
|
||||
|
||||
level = string_to_log_level(str_level);
|
||||
if (level == LOG_LEVEL_NONE)
|
||||
return LOG_LEVEL_NONE;
|
||||
|
||||
current_log_level = level;
|
||||
return current_log_level;
|
||||
return ws_log_set_level(level);
|
||||
}
|
||||
|
||||
|
||||
|
@ -829,18 +832,25 @@ static inline const char *level_color_on(gboolean enable,
|
|||
if (!enable)
|
||||
return "";
|
||||
|
||||
if (level <= LOG_LEVEL_DEBUG)
|
||||
return GREEN;
|
||||
else if (level <= LOG_LEVEL_MESSAGE)
|
||||
return CYAN;
|
||||
else if (level <= LOG_LEVEL_WARNING)
|
||||
return YELLOW;
|
||||
else if (level <= LOG_LEVEL_CRITICAL)
|
||||
return MAGENTA;
|
||||
else if (level <= LOG_LEVEL_ERROR)
|
||||
return RED;
|
||||
else
|
||||
return "";
|
||||
switch (level) {
|
||||
case LOG_LEVEL_NOISY:
|
||||
case LOG_LEVEL_DEBUG:
|
||||
return GREEN;
|
||||
case LOG_LEVEL_INFO:
|
||||
case LOG_LEVEL_MESSAGE:
|
||||
return CYAN;
|
||||
case LOG_LEVEL_WARNING:
|
||||
return YELLOW;
|
||||
case LOG_LEVEL_CRITICAL:
|
||||
return MAGENTA;
|
||||
case LOG_LEVEL_ERROR:
|
||||
return RED;
|
||||
case LOG_LEVEL_ECHO:
|
||||
return YELLOW;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
static inline const char *color_off(gboolean enable)
|
||||
|
@ -972,7 +982,7 @@ static void log_write_dispatch(const char *domain, enum ws_log_level level,
|
|||
user_format, user_ap);
|
||||
}
|
||||
|
||||
if (level >= fatal_log_level) {
|
||||
if (level >= fatal_log_level && level != LOG_LEVEL_ECHO) {
|
||||
abort();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -92,9 +92,10 @@ WS_DLL_PUBLIC
|
|||
enum ws_log_level ws_log_get_level(void);
|
||||
|
||||
|
||||
/** Set the active log level. */
|
||||
/** Set the active log level. Returns the active level or LOG_LEVEL_NONE
|
||||
* if level is invalid. */
|
||||
WS_DLL_PUBLIC
|
||||
void ws_log_set_level(enum ws_log_level level);
|
||||
enum ws_log_level ws_log_set_level(enum ws_log_level level);
|
||||
|
||||
|
||||
/** Set the active log level from a string.
|
||||
|
@ -334,6 +335,9 @@ void ws_logv_full(const char *domain, enum ws_log_level level,
|
|||
#define ws_noisy(...) _LOG_DEBUG(LOG_LEVEL_NOISY, __VA_ARGS__)
|
||||
|
||||
|
||||
#define WS_DEBUG_HERE(...) _LOG_FULL(LOG_LEVEL_ECHO, __VA_ARGS__)
|
||||
|
||||
|
||||
/** This function is called to log a buffer (bytes array).
|
||||
*
|
||||
* Accepts an optional 'msg' argument to provide a description.
|
||||
|
|
Loading…
Reference in New Issue