[Spice-devel] [PATCH spice-common v2] log: Use GLib logging levels directly
Christophe Fergeau
cfergeau at redhat.com
Thu Jun 8 13:46:00 UTC 2017
Acked-by: Christophe Fergeau <cfergeau at redhat.com>
On Thu, Jun 08, 2017 at 02:05:18PM +0100, Frediano Ziglio wrote:
> As we moved toward GLib logging instead of having to convert
> every time the log level from the old system to GLib use
> directly GLib constants.
>
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
> common/log.c | 35 +++++++++++++++++++++--------------
> common/log.h | 26 +++++++++-----------------
> 2 files changed, 30 insertions(+), 31 deletions(-)
>
> Changes since v1:
> - some suggested variable rename and test optimization
>
> diff --git a/common/log.c b/common/log.c
> index 7437d3e..61a27ac 100644
> --- a/common/log.c
> +++ b/common/log.c
> @@ -31,16 +31,24 @@
> #include "backtrace.h"
>
> static int glib_debug_level = INT_MAX;
> -static int abort_level = -1;
> +static int abort_mask = 0;
>
> -#ifndef SPICE_ABORT_LEVEL_DEFAULT
> +#ifndef SPICE_ABORT_MASK_DEFAULT
> #ifdef SPICE_DISABLE_ABORT
> -#define SPICE_ABORT_LEVEL_DEFAULT -1
> +#define SPICE_ABORT_MASK_DEFAULT 0
> #else
> -#define SPICE_ABORT_LEVEL_DEFAULT SPICE_LOG_LEVEL_CRITICAL
> +#define SPICE_ABORT_MASK_DEFAULT (G_LOG_LEVEL_CRITICAL|G_LOG_LEVEL_ERROR)
> #endif
> #endif
>
> +typedef enum {
> + SPICE_LOG_LEVEL_ERROR,
> + SPICE_LOG_LEVEL_CRITICAL,
> + SPICE_LOG_LEVEL_WARNING,
> + SPICE_LOG_LEVEL_INFO,
> + SPICE_LOG_LEVEL_DEBUG,
> +} SpiceLogLevel;
> +
> static GLogLevelFlags spice_log_level_to_glib(SpiceLogLevel level)
> {
> static const GLogLevelFlags glib_levels[] = {
> @@ -95,23 +103,23 @@ static void spice_log_set_debug_level(void)
>
> static void spice_log_set_abort_level(void)
> {
> - if (abort_level == -1) {
> + if (abort_mask == 0) {
> const char *abort_str = g_getenv("SPICE_ABORT_LEVEL");
> if (abort_str != NULL) {
> GLogLevelFlags glib_abort_level;
>
> /* FIXME: To be removed after enough deprecation time */
> g_warning("Setting SPICE_ABORT_LEVEL is deprecated, use G_DEBUG instead");
> - abort_level = atoi(abort_str);
> - glib_abort_level = spice_log_level_to_glib(abort_level);
> + glib_abort_level = spice_log_level_to_glib(atoi(abort_str));
> unsigned int fatal_mask = G_LOG_FATAL_MASK;
> while (glib_abort_level >= G_LOG_LEVEL_ERROR) {
> fatal_mask |= glib_abort_level;
> glib_abort_level >>= 1;
> }
> + abort_mask = fatal_mask;
> g_log_set_fatal_mask(SPICE_LOG_DOMAIN, fatal_mask);
> } else {
> - abort_level = SPICE_ABORT_LEVEL_DEFAULT;
> + abort_mask = SPICE_ABORT_MASK_DEFAULT;
> }
> }
> }
> @@ -146,16 +154,15 @@ SPICE_CONSTRUCTOR_FUNC(spice_log_init)
> }
>
> static void spice_logv(const char *log_domain,
> - SpiceLogLevel log_level,
> + GLogLevelFlags log_level,
> const char *strloc,
> const char *function,
> const char *format,
> va_list args)
> {
> GString *log_msg;
> - GLogLevelFlags glib_level = spice_log_level_to_glib(log_level);
>
> - if ((glib_level & G_LOG_LEVEL_MASK) > glib_debug_level) {
> + if ((log_level & G_LOG_LEVEL_MASK) > glib_debug_level) {
> return; // do not print anything
> }
>
> @@ -166,17 +173,17 @@ static void spice_logv(const char *log_domain,
> if (format) {
> g_string_append_vprintf(log_msg, format, args);
> }
> - g_log(log_domain, glib_level, "%s", log_msg->str);
> + g_log(log_domain, log_level, "%s", log_msg->str);
> g_string_free(log_msg, TRUE);
>
> - if (abort_level != -1 && abort_level >= (int) log_level) {
> + if ((abort_mask & log_level) != 0) {
> spice_backtrace();
> abort();
> }
> }
>
> void spice_log(const char *log_domain,
> - SpiceLogLevel log_level,
> + GLogLevelFlags log_level,
> const char *strloc,
> const char *function,
> const char *format,
> diff --git a/common/log.h b/common/log.h
> index 73432d7..1ea2313 100644
> --- a/common/log.h
> +++ b/common/log.h
> @@ -33,16 +33,8 @@ SPICE_BEGIN_DECLS
>
> #define SPICE_STRLOC __FILE__ ":" G_STRINGIFY (__LINE__)
>
> -typedef enum {
> - SPICE_LOG_LEVEL_ERROR,
> - SPICE_LOG_LEVEL_CRITICAL,
> - SPICE_LOG_LEVEL_WARNING,
> - SPICE_LOG_LEVEL_INFO,
> - SPICE_LOG_LEVEL_DEBUG,
> -} SpiceLogLevel;
> -
> void spice_log(const char *log_domain,
> - SpiceLogLevel log_level,
> + GLogLevelFlags log_level,
> const char *strloc,
> const char *function,
> const char *format,
> @@ -50,20 +42,20 @@ void spice_log(const char *log_domain,
>
> #define spice_return_if_fail(x) G_STMT_START { \
> if G_LIKELY(x) { } else { \
> - spice_log(SPICE_LOG_DOMAIN, SPICE_LOG_LEVEL_CRITICAL, SPICE_STRLOC, G_STRFUNC, "condition `%s' failed", #x); \
> + spice_log(SPICE_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, SPICE_STRLOC, G_STRFUNC, "condition `%s' failed", #x); \
> return; \
> } \
> } G_STMT_END
>
> #define spice_return_val_if_fail(x, val) G_STMT_START { \
> if G_LIKELY(x) { } else { \
> - spice_log(SPICE_LOG_DOMAIN, SPICE_LOG_LEVEL_CRITICAL, SPICE_STRLOC, __FUNCTION__, "condition `%s' failed", #x); \
> + spice_log(SPICE_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, SPICE_STRLOC, __FUNCTION__, "condition `%s' failed", #x); \
> return (val); \
> } \
> } G_STMT_END
>
> #define spice_warn_if_reached() G_STMT_START { \
> - spice_log(SPICE_LOG_DOMAIN, SPICE_LOG_LEVEL_WARNING, SPICE_STRLOC, __FUNCTION__, "should not be reached"); \
> + spice_log(SPICE_LOG_DOMAIN, G_LOG_LEVEL_WARNING, SPICE_STRLOC, __FUNCTION__, "should not be reached"); \
> } G_STMT_END
>
> #define spice_printerr(format, ...) G_STMT_START { \
> @@ -71,23 +63,23 @@ void spice_log(const char *log_domain,
> } G_STMT_END
>
> #define spice_info(format, ...) G_STMT_START { \
> - spice_log(SPICE_LOG_DOMAIN, SPICE_LOG_LEVEL_INFO, SPICE_STRLOC, __FUNCTION__, format, ## __VA_ARGS__); \
> + spice_log(SPICE_LOG_DOMAIN, G_LOG_LEVEL_INFO, SPICE_STRLOC, __FUNCTION__, format, ## __VA_ARGS__); \
> } G_STMT_END
>
> #define spice_debug(format, ...) G_STMT_START { \
> - spice_log(SPICE_LOG_DOMAIN, SPICE_LOG_LEVEL_DEBUG, SPICE_STRLOC, __FUNCTION__, format, ## __VA_ARGS__); \
> + spice_log(SPICE_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, SPICE_STRLOC, __FUNCTION__, format, ## __VA_ARGS__); \
> } G_STMT_END
>
> #define spice_warning(format, ...) G_STMT_START { \
> - spice_log(SPICE_LOG_DOMAIN, SPICE_LOG_LEVEL_WARNING, SPICE_STRLOC, __FUNCTION__, format, ## __VA_ARGS__); \
> + spice_log(SPICE_LOG_DOMAIN, G_LOG_LEVEL_WARNING, SPICE_STRLOC, __FUNCTION__, format, ## __VA_ARGS__); \
> } G_STMT_END
>
> #define spice_critical(format, ...) G_STMT_START { \
> - spice_log(SPICE_LOG_DOMAIN, SPICE_LOG_LEVEL_CRITICAL, SPICE_STRLOC, __FUNCTION__, format, ## __VA_ARGS__); \
> + spice_log(SPICE_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, SPICE_STRLOC, __FUNCTION__, format, ## __VA_ARGS__); \
> } G_STMT_END
>
> #define spice_error(format, ...) G_STMT_START { \
> - spice_log(SPICE_LOG_DOMAIN, SPICE_LOG_LEVEL_ERROR, SPICE_STRLOC, __FUNCTION__, format, ## __VA_ARGS__); \
> + spice_log(SPICE_LOG_DOMAIN, G_LOG_LEVEL_ERROR, SPICE_STRLOC, __FUNCTION__, format, ## __VA_ARGS__); \
> } G_STMT_END
>
> #define spice_warn_if_fail(x) G_STMT_START { \
> --
> 2.9.4
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20170608/f68818bd/attachment.sig>
More information about the Spice-devel
mailing list