send Q_ASSERT, qDebug, qWarning and qFatal messages to syslog
authorThiago Macieira <thiago@kde.org>
Mon, 24 Jan 2022 10:55:59 +0000 (10:55 +0000)
committerUtkarsh Gupta <utkarsh@debian.org>
Mon, 24 Jan 2022 10:55:59 +0000 (10:55 +0000)
Forwarded: not-needed

Author: Thiago Macieira <thiago@kde.org>
Gbp-Pq: Name qtdebug_syslog.patch

src/corelib/global/qglobal.cpp
src/corelib/kernel/qcoreapplication_p.h

index 5b639527da3e39dc8467dc073f57e572eece0f51..ca8884df3eede36cf8257833d3ed0e860207bce2 100644 (file)
@@ -52,6 +52,7 @@
 
 #ifndef QT_NO_QOBJECT
 #include <private/qthread_p.h>
+#include <private/qcoreapplication_p.h>
 #endif
 
 #include <stdio.h>
@@ -94,6 +95,8 @@
 
 _LIT(qt_S60Filter, "Series60v?.*.sis");
 _LIT(qt_symbianSystemInstallDir, "z:\\system\\install\\");
+#elif defined(Q_OS_UNIX)
+#include <syslog.h>
 #endif
 
 QT_BEGIN_NAMESPACE
@@ -2388,6 +2391,27 @@ void qt_message_output(QtMsgType msgType, const char *buf)
 #else
         fprintf(stderr, "%s\n", buf);
         fflush(stderr);
+
+        if (qgetenv("QT_USE_SYSLOG").toInt() > 0) {
+            static bool logOpened = false;
+            if (!logOpened) {
+                QByteArray appname;
+#ifndef QT_NO_QOBJECT
+                appname = QCoreApplication::applicationName().toLatin1(); // don't use the local codec here
+                if (appname.isEmpty())
+                    appname = QCoreApplicationPrivate::staticAppName().toLatin1();
+#endif
+                if (appname.isEmpty())
+                    appname = "unknown-qt-application";
+                openlog(appname, LOG_NOWAIT | LOG_PID, LOG_USER);
+                logOpened = true;
+            }
+
+            int level = msgType == QtFatalMsg ? LOG_ERR :
+                        msgType == QtWarningMsg ? LOG_WARNING :
+                        LOG_DEBUG;
+            syslog(level, "%s", buf);
+        }
 #endif
     }
 
index 0a168d6a9c783140eb76ee1a2a306519f328cc4e..d9df436ef39a72afad2c6a57747b0e9e32ac5e7b 100644 (file)
@@ -86,6 +86,8 @@ public:
     bool sendThroughObjectEventFilters(QObject *, QEvent *);
     bool notify_helper(QObject *, QEvent *);
 
+    static QString staticAppName()
+    { return QCoreApplication::self ? QCoreApplication::self->d_func()->appName() : QString(); }
     virtual QString appName() const;
     mutable QString applicationName;