From 718f02bd8a94bf20fbd5af47d60aba8fd6f040b0 Mon Sep 17 00:00:00 2001 From: Michael Gratton Date: Wed, 15 Apr 2020 16:51:07 +1000 Subject: [PATCH] Geary.Logging: Enable API clients to suppress DEBUG logging per-domain --- src/engine/api/geary-logging.vala | 12 +++++----- src/engine/util/util-logging.vala | 37 ++++++++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/src/engine/api/geary-logging.vala b/src/engine/api/geary-logging.vala index dcdfd76c..d0f8b349 100644 --- a/src/engine/api/geary-logging.vala +++ b/src/engine/api/geary-logging.vala @@ -359,6 +359,7 @@ private unowned FileStream? stream = null; public void init() { if (init_count++ != 0) return; + Logging.suppressed_domains = new Gee.HashSet(); record_lock = GLib.Mutex(); writer_lock = GLib.Mutex(); max_log_length = DEFAULT_MAX_LOG_BUFFER_LENGTH; @@ -571,12 +572,13 @@ public GLib.LogWriterOutput default_log_writer(GLib.LogLevelFlags levels, } private bool should_blacklist(Record record) { + const string DOMAIN_PREFIX = Logging.DOMAIN + "."; return ( - // GdkPixbuf spams us e.g. when window focus changes, - // including between MainWindow and the Inspector, which is - // very annoying. - (record.levels == GLib.LogLevelFlags.LEVEL_DEBUG && - record.domain == "GdkPixbuf") || + // Don't need to check for the engine's domains, they were + // already handled by Source's methods. + (record.domain != Logging.DOMAIN && + !record.domain.has_prefix(DOMAIN_PREFIX) && + record.domain in Logging.suppressed_domains) || // GAction does not support disabling parameterised actions // with specific values, but GTK complains if the parameter is // set to null to achieve the same effect, and they aren't diff --git a/src/engine/util/util-logging.vala b/src/engine/util/util-logging.vala index 9afa8cc8..5fd90403 100644 --- a/src/engine/util/util-logging.vala +++ b/src/engine/util/util-logging.vala @@ -7,6 +7,35 @@ */ +namespace Geary.Logging { + + + internal Gee.Set suppressed_domains; + + + /** + * Suppresses debug logging for a given logging domain. + * + * If a logging domain is suppressed, DEBUG-level logging will not + * be sent to the logging system. + * + * @see unsuppress_domain + */ + public void suppress_domain(string domain) { + Logging.suppressed_domains.add(domain); + } + + /** + * Un-suppresses debug logging for a given logging domain. + * + * @see suppress_domain + */ + public void unsuppress_domain(string domain) { + Logging.suppressed_domains.remove(domain); + } + +} + /** * Mixin interface for objects that support structured logging. * @@ -167,9 +196,11 @@ public interface Geary.Logging.Source : GLib.Object { */ [PrintfFormat] public inline void debug(string fmt, ...) { - log_structured( - this.logging_flags, LogLevelFlags.LEVEL_DEBUG, fmt, va_list() - ); + if (!(this.logging_domain in Logging.suppressed_domains)) { + log_structured( + this.logging_flags, LogLevelFlags.LEVEL_DEBUG, fmt, va_list() + ); + } } /**