summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@pelagicore.com>2019-03-12 14:22:43 +0100
committerDominik Holland <dominik.holland@pelagicore.com>2019-08-30 17:36:36 +0200
commitc1052446d6932dce64c1b480e9ddf229b75293bc (patch)
tree3a9a0f112348db6e591f0332ac12b4f5e51790fc
parenta714a6710b0edaeac9bb5e25f45a577bb1fe710d (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.qdoc13
-rw-r--r--src/common-lib/logging.cpp32
-rw-r--r--src/common-lib/logging.h7
-rw-r--r--src/launcher-lib/launchermain.cpp6
-rw-r--r--src/launcher-lib/launchermain.h2
-rw-r--r--src/main-lib/defaultconfiguration.cpp17
-rw-r--r--src/main-lib/defaultconfiguration.h2
-rw-r--r--src/main-lib/main.cpp2
-rw-r--r--src/manager-lib/nativeruntime.cpp3
-rw-r--r--src/shared-main-lib/sharedmain.cpp4
-rw-r--r--src/shared-main-lib/sharedmain.h2
-rw-r--r--src/tools/launcher-qml/launcher-qml.cpp2
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());