Don't silently kill debug messages
authorKevin Ottens <kevin.ottens@nextcloud.com>
Tue, 12 May 2020 15:33:13 +0000 (17:33 +0200)
committerKevin Ottens <kevin.ottens@nextcloud.com>
Tue, 12 May 2020 15:33:13 +0000 (17:33 +0200)
The message handler globally installed by the logger silently drop
messages if the logger is not logging. On top of it, it doesn't log
debug messages by default.

Anything not logged is currently silently discarded. This can come as a
surprise to a developer trying to contribute for the first time and
adding some debug message for some reason.

We're thus trying to strike a middle ground which is that debug messages
get a regular output if the logger isn't interested in them.

Signed-off-by: Kevin Ottens <kevin.ottens@nextcloud.com>
src/libsync/logger.cpp

index ef486266fdbe3365c6a6f1b47bdefbff193f0370..fb83259e5cd03985c60de954c7ff699e9848910e 100644 (file)
 
 namespace OCC {
 
+QtMessageHandler s_originalMessageHandler = nullptr;
+
 static void mirallLogCatcher(QtMsgType type, const QMessageLogContext &ctx, const QString &message)
 {
     auto logger = Logger::instance();
-    if (!logger->isNoop()) {
+    if (type == QtDebugMsg && !logger->logDebug()) {
+        if (s_originalMessageHandler) {
+            s_originalMessageHandler(type, ctx, message);
+        }
+    } else if (!logger->isNoop()) {
         logger->doLog(qFormatLogMessage(type, ctx, message));
     }
 }
@@ -50,7 +56,7 @@ Logger::Logger(QObject *parent)
 {
     qSetMessagePattern("[%{function} \t%{message}");
 #ifndef NO_MSG_HANDLER
-   qInstallMessageHandler(mirallLogCatcher);
+   s_originalMessageHandler = qInstallMessageHandler(mirallLogCatcher);
 #else
     Q_UNUSED(mirallLogCatcher)
 #endif