diff options
author | Dominik Holland <dominik.holland@pelagicore.com> | 2019-03-12 14:22:43 +0100 |
---|---|---|
committer | Dominik Holland <dominik.holland@pelagicore.com> | 2019-08-30 17:36:36 +0200 |
commit | c1052446d6932dce64c1b480e9ddf229b75293bc (patch) | |
tree | 3a9a0f112348db6e591f0332ac12b4f5e51790fc | |
parent | a714a6710b0edaeac9bb5e25f45a577bb1fe710d (diff) |
Add more logging configuration options
* Introduce an option to configure the qtMessagePattern in the config.yaml
* Add an option to configure whether the AM internal console logging
function should be used.
Cherry-picked from 5.13: 09f0e58
Change-Id: Ied5b08766072431384c0718529600b767d200bf7
Reviewed-by: Robert Griebl <robert.griebl@pelagicore.com>
Reviewed-by: Kavindra Palaraja <kpalaraja@luxoft.com>
-rw-r--r-- | doc/configuration.qdoc | 13 | ||||
-rw-r--r-- | src/common-lib/logging.cpp | 32 | ||||
-rw-r--r-- | src/common-lib/logging.h | 7 | ||||
-rw-r--r-- | src/launcher-lib/launchermain.cpp | 6 | ||||
-rw-r--r-- | src/launcher-lib/launchermain.h | 2 | ||||
-rw-r--r-- | src/main-lib/defaultconfiguration.cpp | 17 | ||||
-rw-r--r-- | src/main-lib/defaultconfiguration.h | 2 | ||||
-rw-r--r-- | src/main-lib/main.cpp | 2 | ||||
-rw-r--r-- | src/manager-lib/nativeruntime.cpp | 3 | ||||
-rw-r--r-- | src/shared-main-lib/sharedmain.cpp | 4 | ||||
-rw-r--r-- | src/shared-main-lib/sharedmain.h | 2 | ||||
-rw-r--r-- | src/tools/launcher-qml/launcher-qml.cpp | 2 |
12 files changed, 83 insertions, 9 deletions
diff --git a/doc/configuration.qdoc b/doc/configuration.qdoc index 0adca9e7..72aded9d 100644 --- a/doc/configuration.qdoc +++ b/doc/configuration.qdoc @@ -289,6 +289,19 @@ all your imports paths and file references relative to your main config file. \l {Logging and Debugging}. \row \li \b - + \br \e logging/messagePattern + \li string + \li If provided, used as the Qt message pattern. For more information about the format see + qSetMessagePattern(). +\row + \li \b - + \br \e logging/useAMConsoleLogger + \li bool + \li Always use the application manager specific logging function, which enables colored console + output. If no value or an invalid value is provided, the logging function is only used when + messagePattern isn't set. +\row + \li \b - \br \e logging/dlt/id \li string \li If provided, it will be used as the automotive DLT application id. The size is limited to diff --git a/src/common-lib/logging.cpp b/src/common-lib/logging.cpp index 9e42f3fd..f14629d0 100644 --- a/src/common-lib/logging.cpp +++ b/src/common-lib/logging.cpp @@ -116,10 +116,12 @@ bool Logging::s_dltEnabled = #else false; #endif -bool Logging::s_useDefaultQtHandler = false; +bool Logging::s_messagePatternDefined = false; +bool Logging::s_useAMConsoleLogger = false; QStringList Logging::s_rules; QtMessageHandler Logging::s_defaultQtHandler = nullptr; QByteArray Logging::s_applicationId = QByteArray(); +QVariant Logging::s_useAMConsoleLoggerConfig = QVariant(); static void colorLogToStderr(QtMsgType msgType, const QMessageLogContext &context, const QString &message) @@ -309,13 +311,13 @@ void Logging::initialize(int argc, const char * const *argv) if (s_dltEnabled) QDltRegistration::messageHandler(msgType, context, message); #endif - if (Q_UNLIKELY(s_useDefaultQtHandler)) + if (Q_UNLIKELY(!s_useAMConsoleLogger)) s_defaultQtHandler(msgType, context, message); else colorLogToStderr(msgType, context, message); }; - s_useDefaultQtHandler = qEnvironmentVariableIsSet("QT_MESSAGE_PATTERN"); + s_messagePatternDefined = qEnvironmentVariableIsSet("QT_MESSAGE_PATTERN"); s_defaultQtHandler = qInstallMessageHandler(messageHandler); } @@ -330,6 +332,30 @@ void Logging::setFilterRules(const QStringList &rules) QLoggingCategory::setFilterRules(rules.join(qL1C('\n'))); } +void Logging::setMessagePattern(const QString &pattern) +{ + if (!pattern.isEmpty()) { + if (!s_messagePatternDefined) { + qputenv("QT_MESSAGE_PATTERN", pattern.toLocal8Bit()); + s_messagePatternDefined = true; + } + } +} + +QVariant Logging::useAMConsoleLogger() +{ + return s_useAMConsoleLoggerConfig; +} + +void Logging::useAMConsoleLogger(const QVariant &config) +{ + s_useAMConsoleLoggerConfig = config; + if (!s_useAMConsoleLoggerConfig.isValid()) + s_useAMConsoleLogger = !s_messagePatternDefined; + else + s_useAMConsoleLogger = s_useAMConsoleLoggerConfig.toBool(); +} + QByteArray Logging::applicationId() { return s_applicationId; diff --git a/src/common-lib/logging.h b/src/common-lib/logging.h index c27e9380..7671a6cb 100644 --- a/src/common-lib/logging.h +++ b/src/common-lib/logging.h @@ -65,6 +65,9 @@ public: static void initialize(int argc, const char * const *argv); static QStringList filterRules(); static void setFilterRules(const QStringList &rules); + static void setMessagePattern(const QString &pattern); + static QVariant useAMConsoleLogger(); + static void useAMConsoleLogger(const QVariant &config); static QByteArray applicationId(); static void setApplicationId(const QByteArray &appId); @@ -81,10 +84,12 @@ public: private: static bool s_dltEnabled; - static bool s_useDefaultQtHandler; + static bool s_messagePatternDefined; + static bool s_useAMConsoleLogger; static QStringList s_rules; static QtMessageHandler s_defaultQtHandler; static QByteArray s_applicationId; + static QVariant s_useAMConsoleLoggerConfig; }; void am_trace(QDebug); diff --git a/src/launcher-lib/launchermain.cpp b/src/launcher-lib/launchermain.cpp index 358675fc..5b573c4e 100644 --- a/src/launcher-lib/launchermain.cpp +++ b/src/launcher-lib/launchermain.cpp @@ -118,6 +118,11 @@ QStringList LauncherMain::loggingRules() const return m_loggingRules; } +QVariant LauncherMain::useAMConsoleLogger() const +{ + return m_useAMConsoleLogger; +} + QString LauncherMain::p2pDBusName() const { return qSL("am"); @@ -200,6 +205,7 @@ void LauncherMain::loadConfiguration(const QByteArray &configYaml) Q_DECL_NOEXCE QVariantMap loggingConfig = m_configuration.value(qSL("logging")).toMap(); m_loggingRules = variantToStringList(loggingConfig.value(qSL("rules"))); + m_useAMConsoleLogger = loggingConfig.value(qSL("useAMConsoleLogger")); QVariantMap dbusConfig = m_configuration.value(qSL("dbus")).toMap(); m_dbusAddressP2P = dbusConfig.value(qSL("p2p")).toString(); diff --git a/src/launcher-lib/launchermain.h b/src/launcher-lib/launchermain.h index 2bb91663..7ff1dd31 100644 --- a/src/launcher-lib/launchermain.h +++ b/src/launcher-lib/launchermain.h @@ -85,6 +85,7 @@ public: void setSlowAnimations(bool slow); QVariantMap systemProperties() const; QStringList loggingRules() const; + QVariant useAMConsoleLogger() const; QString p2pDBusName() const; QString notificationDBusName() const; @@ -118,6 +119,7 @@ private: QVariantMap m_openGLConfiguration; QString m_iconThemeName; QStringList m_iconThemeSearchPaths; + QVariant m_useAMConsoleLogger; WaylandQtAMClientExtension *m_waylandExtension = nullptr; }; diff --git a/src/main-lib/defaultconfiguration.cpp b/src/main-lib/defaultconfiguration.cpp index 2987a52a..b3469534 100644 --- a/src/main-lib/defaultconfiguration.cpp +++ b/src/main-lib/defaultconfiguration.cpp @@ -298,6 +298,23 @@ QStringList DefaultConfiguration::loggingRules() const return value<QStringList>("logging-rule", { "logging", "rules" }); } +QString DefaultConfiguration::messagePattern() const +{ + return value<QString>(nullptr, { "logging", "messagePattern" }); +} + +QVariant DefaultConfiguration::useAMConsoleLogger() const +{ + // true = use the am logger + // false = don't use the am logger + // invalid = don't use the am logger when QT_MESSAGE_PATTERN is set + QVariant val = value<QVariant>(nullptr, { "logging", "useAMConsoleLogger" }); + if (val.type() == QVariant::Bool) + return val; + else + return QVariant(); +} + QString DefaultConfiguration::style() const { return value<QString>(nullptr, { "ui", "style" }); diff --git a/src/main-lib/defaultconfiguration.h b/src/main-lib/defaultconfiguration.h index 7ab7d8a3..0a21394f 100644 --- a/src/main-lib/defaultconfiguration.h +++ b/src/main-lib/defaultconfiguration.h @@ -88,6 +88,8 @@ public: bool qmlDebugging() const; QString singleApp() const; QStringList loggingRules() const; + QString messagePattern() const; + QVariant useAMConsoleLogger() const; QString style() const; QString iconThemeName() const; QStringList iconThemeSearchPaths() const; diff --git a/src/main-lib/main.cpp b/src/main-lib/main.cpp index 22a4abf5..37fcf4a7 100644 --- a/src/main-lib/main.cpp +++ b/src/main-lib/main.cpp @@ -206,7 +206,7 @@ void Main::setup(const DefaultConfiguration *cfg, const QStringList &deploymentW m_installedAppsManifestDir = cfg->installedAppsManifestDir(); CrashHandler::setCrashActionConfiguration(cfg->managerCrashAction()); - setupLoggingRules(cfg->verbose(), cfg->loggingRules()); + setupLogging(cfg->verbose(), cfg->loggingRules(), cfg->messagePattern(), cfg->useAMConsoleLogger()); setupQmlDebugging(cfg->qmlDebugging()); if (!cfg->dltId().isEmpty() || !cfg->dltDescription().isEmpty()) Logging::setSystemUiDltId(cfg->dltId().toLocal8Bit(), cfg->dltDescription().toLocal8Bit()); diff --git a/src/manager-lib/nativeruntime.cpp b/src/manager-lib/nativeruntime.cpp index ad7d5231..3c1865b6 100644 --- a/src/manager-lib/nativeruntime.cpp +++ b/src/manager-lib/nativeruntime.cpp @@ -261,7 +261,8 @@ bool NativeRuntime::start() QVariantMap loggingConfig = { { qSL("dlt"), Logging::isDltEnabled() }, - { qSL("rules"), Logging::filterRules() } + { qSL("rules"), Logging::filterRules() }, + { qSL("useAMConsoleLogger"), Logging::useAMConsoleLogger() } }; QVariantMap uiConfig; diff --git a/src/shared-main-lib/sharedmain.cpp b/src/shared-main-lib/sharedmain.cpp index 6780efe5..647eb91f 100644 --- a/src/shared-main-lib/sharedmain.cpp +++ b/src/shared-main-lib/sharedmain.cpp @@ -150,12 +150,14 @@ void SharedMain::setupQmlDebugging(bool qmlDebugging) } } -void SharedMain::setupLoggingRules(bool verbose, const QStringList &loggingRules) +void SharedMain::setupLogging(bool verbose, const QStringList &loggingRules, const QString &messagePattern, const QVariant &useAMConsoleLogger) { const QStringList rules = verbose ? QStringList() << qSL("*=true") << qSL("qt.*.debug=false") : loggingRules.isEmpty() ? QStringList(qSL("*.debug=false")) : loggingRules; Logging::setFilterRules(rules); + Logging::setMessagePattern(messagePattern); + Logging::useAMConsoleLogger(useAMConsoleLogger); StartupTimer::instance()->checkpoint("after logging setup"); } diff --git a/src/shared-main-lib/sharedmain.h b/src/shared-main-lib/sharedmain.h index 05d91290..7a4cac85 100644 --- a/src/shared-main-lib/sharedmain.h +++ b/src/shared-main-lib/sharedmain.h @@ -63,7 +63,7 @@ public: static int &preConstructor(int &argc); void setupIconTheme(const QStringList &themeSearchPaths, const QString &themeName); void setupQmlDebugging(bool qmlDebugging); - void setupLoggingRules(bool verbose, const QStringList &loggingRules); + void setupLogging(bool verbose, const QStringList &loggingRules, const QString &messagePattern, const QVariant &useAMConsoleLogger); void setupOpenGL(const QVariantMap &openGLConfiguration); #if !defined(AM_HEADLESS) diff --git a/src/tools/launcher-qml/launcher-qml.cpp b/src/tools/launcher-qml/launcher-qml.cpp index ccaa78da..7b25117f 100644 --- a/src/tools/launcher-qml/launcher-qml.cpp +++ b/src/tools/launcher-qml/launcher-qml.cpp @@ -144,7 +144,7 @@ int main(int argc, char *argv[]) a.loadConfiguration(); CrashHandler::setCrashActionConfiguration(a.runtimeConfiguration().value(qSL("crashAction")).toMap()); - a.setupLoggingRules(false, a.loggingRules()); // the verbose flag has already been factored into the rules + a.setupLogging(false, a.loggingRules(), QString(), a.useAMConsoleLogger()); // the verbose flag has already been factored into the rules a.setupQmlDebugging(clp.isSet(qSL("qml-debug"))); a.setupOpenGL(a.openGLConfiguration()); a.setupIconTheme(a.iconThemeSearchPaths(), a.iconThemeName()); |