[gnome-terminal] client: legacy: Suppress debug message spam



commit f84316ec180e9b9515a0914e883a0585f6877c7e
Author: Christian Persch <chpe src gnome org>
Date:   Thu Apr 9 21:04:32 2020 +0200

    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 <https://gitlab.gnome.org/kim.nguyen>
    
    Fixes: https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/42

 src/terminal-options.c | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)
---
diff --git a/src/terminal-options.c b/src/terminal-options.c
index d5bb5f24..5cc20798 100644
--- a/src/terminal-options.c
+++ b/src/terminal-options.c
@@ -62,9 +62,33 @@ terminal_fprintf (FILE* fp,
   }
 }
 
+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,
@@ -72,9 +96,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;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]