From 8b0d3a904e512977383954fc5c1aed20092145eb Mon Sep 17 00:00:00 2001 From: Christian Persch Date: Thu, 9 Apr 2020 21:04:32 +0200 Subject: [PATCH] client: legacy: Suppress debug message spam The glib log writer API has a deficiency in that the filtering is done in the default log writer, instead of only passing messages that pass the filter. This is filed as glib#2087, but until that is fixed, apply a simple log level filter to work around it. Patch by Kim Nguyen Fixes: https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/42 --- src/terminal-options.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/terminal-options.c b/src/terminal-options.c index 8d506d82..fe3cad92 100644 --- a/src/terminal-options.c +++ b/src/terminal-options.c @@ -63,10 +63,33 @@ terminal_fprintf (FILE* fp, } #if GLIB_CHECK_VERSION (2, 50, 0) +static TerminalVerbosity +verbosity_from_log_level (GLogLevelFlags log_level) +{ + guint level = log_level & G_LOG_LEVEL_MASK; + TerminalVerbosity res; + level = level & ~(level - 1); /* extract the highest bit */ + switch (level) { + case G_LOG_LEVEL_DEBUG: + res = TERMINAL_VERBOSITY_DEBUG; + break; + case G_LOG_LEVEL_INFO: + res = TERMINAL_VERBOSITY_DETAIL; + break; + default: + /* better display than lose important messages */ + res = TERMINAL_VERBOSITY_NORMAL; + } + return res; +} /* Need to install a special log writer so we never output * anything without the '# ' prepended, in case --print-environment * is used. + * + * FIXME: Until issue glib#2087 is fixed, apply a simple log level filter + * to prevent spamming dconf (and other) debug messages to stderr, + * see issue gnome-terminal#42. */ GLogWriterOutput terminal_log_writer (GLogLevelFlags log_level, @@ -74,9 +97,10 @@ terminal_log_writer (GLogLevelFlags log_level, gsize n_fields, gpointer user_data) { + TerminalVerbosity level = verbosity_from_log_level(log_level); for (gsize i = 0; i < n_fields; i++) { if (g_str_equal (fields[i].key, "MESSAGE")) - terminal_printerr ("%s\n", (const char*)fields[i].value); + terminal_fprintf (stderr, level, "%s\n", (const char*)fields[i].value); } return G_LOG_WRITER_HANDLED; -- 2.40.1