summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griebl <robert.griebl@qt.io>2022-02-23 13:41:31 +0100
committerRobert Griebl <robert.griebl@qt.io>2022-02-25 12:39:22 +0100
commit1acd11515aaf37b535791ddec0bd9698ad34de59 (patch)
treebba72cc3f7b4425ca9f21935cccdf914d6d2f5d0
parent6b50bedfbf0451440da0d6c269737876cf66b3fb (diff)
downloadqtapplicationmanager-1acd11515aaf37b535791ddec0bd9698ad34de59.tar.gz
Add an option to configure how very long log messages are passed to DLT
This commit was already planned for the 5.12 release, had to be reverted due to a SC break in QtGeniviExtras and was subsequentially forgotten. Change-Id: I76ab4af4b1ee847a33ad0eb523b79021cf666d43 Pick-to: 5.15 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
-rw-r--r--doc/configuration.qdoc8
-rw-r--r--src/common-lib/logging.cpp24
-rw-r--r--src/common-lib/logging.h3
-rw-r--r--src/launcher-lib/launchermain.cpp6
-rw-r--r--src/launcher-lib/launchermain.h2
-rw-r--r--src/main-lib/configuration.cpp22
-rw-r--r--src/main-lib/configuration.h2
-rw-r--r--src/main-lib/configuration_p.h1
-rw-r--r--src/main-lib/main.cpp1
-rw-r--r--src/manager-lib/nativeruntime.cpp3
-rw-r--r--src/tools/launcher-qml/launcher-qml.cpp2
-rw-r--r--tests/auto/configuration/data/config1.yaml1
-rw-r--r--tests/auto/configuration/data/config2.yaml1
-rw-r--r--tests/auto/configuration/tst_configuration.cpp2
14 files changed, 76 insertions, 2 deletions
diff --git a/doc/configuration.qdoc b/doc/configuration.qdoc
index 583eb166..e413f6be 100644
--- a/doc/configuration.qdoc
+++ b/doc/configuration.qdoc
@@ -374,6 +374,14 @@ merged into one single, final list.
augment the short DLT application ID with a more verbose definition.
\note A default description is used until this configuration option has been applied.
\row
+ \li [\c logging/dlt/longMessageBehavior]
+ \li string
+ \li Configures how very long messages (more than ~1000 characters) should be handled when
+ using automotive DLT. The default behavior is to truncate the message to the maximum
+ possible size. Other options are \c split to cut the message into several smaller
+ messages, \c pass to forward it as-is to DLT or \c truncate to explicitly request the
+ default behvior.
+ \row
\li \b --no-dlt-logging
\li bool
\li Disables logging using automotive DLT. This option is especially useful when no
diff --git a/src/common-lib/logging.cpp b/src/common-lib/logging.cpp
index 92b7b2ff..edf3871c 100644
--- a/src/common-lib/logging.cpp
+++ b/src/common-lib/logging.cpp
@@ -192,6 +192,7 @@ QStringList Logging::s_rules;
QtMessageHandler Logging::s_defaultQtHandler = nullptr;
QByteArray Logging::s_applicationId = QByteArray();
QVariant Logging::s_useAMConsoleLoggerConfig = QVariant();
+QString Logging::s_dltLongMessageBehavior = QString();
QMutex Logging::s_deferredMessagesMutex;
static std::vector<DeferredMessage> s_deferredMessages;
@@ -525,6 +526,29 @@ void Logging::setDltApplicationId(const QByteArray &dltAppId, const QByteArray &
#endif
}
+QString Logging::dltLongMessageBehavior()
+{
+ return s_dltLongMessageBehavior;
+}
+
+void Logging::setDltLongMessageBehavior(const QString &behaviorString)
+{
+ if (!s_dltEnabled)
+ return;
+
+ s_dltLongMessageBehavior = behaviorString;
+
+#if defined(AM_USE_DLTLOGGING)
+ QDltRegistration::LongMessageBehavior behavior = QDltRegistration::LongMessageBehavior::Truncate;
+ if (behaviorString == qL1S("split"))
+ behavior = QDltRegistration::LongMessageBehavior::Split;
+ else if (behaviorString == qL1S("pass"))
+ behavior = QDltRegistration::LongMessageBehavior::Pass;
+
+ globalDltRegistration()->setLongMessageBehavior(behavior);
+#endif
+}
+
void Logging::logToDlt(QtMsgType msgType, const QMessageLogContext &context, const QString &message)
{
#if defined(AM_USE_DLTLOGGING)
diff --git a/src/common-lib/logging.h b/src/common-lib/logging.h
index 3090875d..2ccccbf7 100644
--- a/src/common-lib/logging.h
+++ b/src/common-lib/logging.h
@@ -75,6 +75,8 @@ public:
static void registerUnregisteredDltContexts();
static void setSystemUiDltId(const QByteArray &dltAppId, const QByteArray &dltAppDescription);
static void setDltApplicationId(const QByteArray &dltAppId, const QByteArray &dltAppDescription);
+ static QString dltLongMessageBehavior();
+ static void setDltLongMessageBehavior(const QString &behaviorString);
static void logToDlt(QtMsgType msgType, const QMessageLogContext &context, const QString &message);
@@ -86,6 +88,7 @@ private:
static QtMessageHandler s_defaultQtHandler;
static QByteArray s_applicationId;
static QVariant s_useAMConsoleLoggerConfig;
+ static QString s_dltLongMessageBehavior;
static QMutex s_deferredMessagesMutex;
};
diff --git a/src/launcher-lib/launchermain.cpp b/src/launcher-lib/launchermain.cpp
index 5bc567b0..17fde05b 100644
--- a/src/launcher-lib/launchermain.cpp
+++ b/src/launcher-lib/launchermain.cpp
@@ -116,6 +116,11 @@ QVariant LauncherMain::useAMConsoleLogger() const
return m_useAMConsoleLogger;
}
+QString LauncherMain::dltLongMessageBehavior() const
+{
+ return m_dltLongMessageBehavior;
+}
+
QString LauncherMain::p2pDBusName() const
{
return qSL("am");
@@ -204,6 +209,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"));
+ m_dltLongMessageBehavior = loggingConfig.value(qSL("dltLongMessageBehavior")).toString();
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 dccad3c9..088b5864 100644
--- a/src/launcher-lib/launchermain.h
+++ b/src/launcher-lib/launchermain.h
@@ -62,6 +62,7 @@ public:
QVariantMap systemProperties() const;
QStringList loggingRules() const;
QVariant useAMConsoleLogger() const;
+ QString dltLongMessageBehavior() const;
QString p2pDBusName() const;
QString notificationDBusName() const;
@@ -99,6 +100,7 @@ private:
QString m_iconThemeName;
QStringList m_iconThemeSearchPaths;
QVariant m_useAMConsoleLogger;
+ QString m_dltLongMessageBehavior;
#if defined(QT_WAYLANDCLIENT_LIB)
WaylandQtAMClientExtension *m_waylandExtension = nullptr;
#endif
diff --git a/src/main-lib/configuration.cpp b/src/main-lib/configuration.cpp
index bfc82fbf..b9b152de 100644
--- a/src/main-lib/configuration.cpp
+++ b/src/main-lib/configuration.cpp
@@ -386,7 +386,7 @@ void Configuration::parseWithArguments(const QStringList &arguments)
}
-const quint32 ConfigurationData::DataStreamVersion = 5;
+const quint32 ConfigurationData::DataStreamVersion = 6;
ConfigurationData *ConfigurationData::loadFromCache(QDataStream &ds)
@@ -409,6 +409,7 @@ ConfigurationData *ConfigurationData::loadFromCache(QDataStream &ds)
>> cd->plugins.container
>> cd->logging.dlt.id
>> cd->logging.dlt.description
+ >> cd->logging.dlt.longMessageBehavior
>> cd->logging.rules
>> cd->logging.messagePattern
>> cd->logging.useAMConsoleLogger
@@ -471,6 +472,7 @@ void ConfigurationData::saveToCache(QDataStream &ds) const
<< plugins.container
<< logging.dlt.id
<< logging.dlt.description
+ << logging.dlt.longMessageBehavior
<< logging.rules
<< logging.messagePattern
<< logging.useAMConsoleLogger
@@ -570,6 +572,7 @@ void ConfigurationData::mergeFrom(const ConfigurationData *from)
MERGE_FIELD(plugins.container);
MERGE_FIELD(logging.dlt.id);
MERGE_FIELD(logging.dlt.description);
+ MERGE_FIELD(logging.dlt.longMessageBehavior);
MERGE_FIELD(logging.rules);
MERGE_FIELD(logging.messagePattern);
MERGE_FIELD(logging.useAMConsoleLogger);
@@ -726,7 +729,17 @@ ConfigurationData *ConfigurationData::loadFromSource(QIODevice *source, const QS
{ "id", false, YamlParser::Scalar, [&cd](YamlParser *p) {
cd->logging.dlt.id = p->parseScalar().toString(); } },
{ "description", false, YamlParser::Scalar, [&cd](YamlParser *p) {
- cd->logging.dlt.description = p->parseScalar().toString(); } }
+ cd->logging.dlt.description = p->parseScalar().toString(); } },
+ { "longMessageBehavior", false, YamlParser::Scalar, [&cd](YamlParser *p) {
+ static const QStringList validValues {
+ qL1S("split"), qL1S("truncate"), qL1S("pass")
+ };
+ QString s = p->parseScalar().toString().trimmed();
+ if (!s.isEmpty() && !validValues.contains(s)) {
+ throw YamlParserException(p, "dlt.longMessageBehavior needs to be one of %1").arg(validValues);
+ }
+ cd->logging.dlt.longMessageBehavior = s;
+ } }
}); } }
}); } },
{ "installer", false, YamlParser::Map, [&cd](YamlParser *p) {
@@ -1149,6 +1162,11 @@ QString Configuration::dltDescription() const
return value<QString>(nullptr, m_data->logging.dlt.description);
}
+QString Configuration::dltLongMessageBehavior() const
+{
+ return value<QString>(nullptr, m_data->logging.dlt.longMessageBehavior);
+}
+
QStringList Configuration::resources() const
{
return m_data->ui.resources;
diff --git a/src/main-lib/configuration.h b/src/main-lib/configuration.h
index a834318e..64eb040e 100644
--- a/src/main-lib/configuration.h
+++ b/src/main-lib/configuration.h
@@ -98,6 +98,8 @@ public:
bool enableTouchEmulation() const;
QString dltId() const;
QString dltDescription() const;
+ QString dltLongMessageBehavior() const;
+
QStringList resources() const;
QVariantMap openGLConfiguration() const;
diff --git a/src/main-lib/configuration_p.h b/src/main-lib/configuration_p.h
index 0b8277c1..671cbf82 100644
--- a/src/main-lib/configuration_p.h
+++ b/src/main-lib/configuration_p.h
@@ -84,6 +84,7 @@ struct ConfigurationData
struct {
QString id;
QString description;
+ QString longMessageBehavior;
} dlt;
QStringList rules;
QString messagePattern;
diff --git a/src/main-lib/main.cpp b/src/main-lib/main.cpp
index 19a79add..0156ab3a 100644
--- a/src/main-lib/main.cpp
+++ b/src/main-lib/main.cpp
@@ -204,6 +204,7 @@ void Main::setup(const Configuration *cfg) Q_DECL_NOEXCEPT_EXPR(false)
setupQmlDebugging(cfg->qmlDebugging());
if (!cfg->dltId().isEmpty() || !cfg->dltDescription().isEmpty())
Logging::setSystemUiDltId(cfg->dltId().toLocal8Bit(), cfg->dltDescription().toLocal8Bit());
+ Logging::setDltLongMessageBehavior(cfg->dltLongMessageBehavior());
Logging::registerUnregisteredDltContexts();
setupLogging(cfg->verbose(), cfg->loggingRules(), cfg->messagePattern(), cfg->useAMConsoleLogger());
diff --git a/src/manager-lib/nativeruntime.cpp b/src/manager-lib/nativeruntime.cpp
index 31d842a2..fb7ef7be 100644
--- a/src/manager-lib/nativeruntime.cpp
+++ b/src/manager-lib/nativeruntime.cpp
@@ -262,6 +262,9 @@ bool NativeRuntime::start()
{ qSL("useAMConsoleLogger"), Logging::useAMConsoleLogger() }
};
+ if (Logging::isDltEnabled())
+ loggingConfig.insert(qSL("dltLongMessageBehavior"), Logging::dltLongMessageBehavior());
+
QVariantMap uiConfig;
if (m_slowAnimations)
uiConfig.insert(qSL("slowAnimations"), true);
diff --git a/src/tools/launcher-qml/launcher-qml.cpp b/src/tools/launcher-qml/launcher-qml.cpp
index b7481359..601c4307 100644
--- a/src/tools/launcher-qml/launcher-qml.cpp
+++ b/src/tools/launcher-qml/launcher-qml.cpp
@@ -147,6 +147,8 @@ int main(int argc, char *argv[])
launcher.setupIconTheme(launcher.iconThemeSearchPaths(), launcher.iconThemeName());
launcher.registerWaylandExtensions();
+ Logging::setDltLongMessageBehavior(launcher.dltLongMessageBehavior());
+
StartupTimer::instance()->checkpoint("after basic initialization");
if (!directLoadManifest.isEmpty()) {
diff --git a/tests/auto/configuration/data/config1.yaml b/tests/auto/configuration/data/config1.yaml
index 3e6d939f..77e9ad8b 100644
--- a/tests/auto/configuration/data/config1.yaml
+++ b/tests/auto/configuration/data/config1.yaml
@@ -26,6 +26,7 @@ logging:
dlt:
id: 'dltid'
description: 'dltdesc'
+ longMessageBehavior: 'split'
rules: [ lr1, lr2 ]
messagePattern: 'msgPattern'
useAMConsoleLogger: true
diff --git a/tests/auto/configuration/data/config2.yaml b/tests/auto/configuration/data/config2.yaml
index cd9d9766..e18a0863 100644
--- a/tests/auto/configuration/data/config2.yaml
+++ b/tests/auto/configuration/data/config2.yaml
@@ -31,6 +31,7 @@ logging:
dlt:
id: 'dltid2'
description: 'dltdesc2'
+ longMessageBehavior: 'truncate'
rules: lr3
messagePattern: 'msgPattern2'
useAMConsoleLogger: 'auto'
diff --git a/tests/auto/configuration/tst_configuration.cpp b/tests/auto/configuration/tst_configuration.cpp
index e54d62f5..aa506312 100644
--- a/tests/auto/configuration/tst_configuration.cpp
+++ b/tests/auto/configuration/tst_configuration.cpp
@@ -189,6 +189,7 @@ void tst_Configuration::simpleConfig()
QCOMPARE(c.enableTouchEmulation(), true);
QCOMPARE(c.dltId(), qSL("dltid"));
QCOMPARE(c.dltDescription(), qSL("dltdesc"));
+ QCOMPARE(c.dltLongMessageBehavior(), qSL("split"));
QCOMPARE(c.resources(), QStringList({ qSL("r1"), qSL("r2") }));
QCOMPARE(c.openGLConfiguration(), QVariantMap
@@ -319,6 +320,7 @@ void tst_Configuration::mergedConfig()
QCOMPARE(c.enableTouchEmulation(), true);
QCOMPARE(c.dltId(), qSL("dltid2"));
QCOMPARE(c.dltDescription(), qSL("dltdesc2"));
+ QCOMPARE(c.dltLongMessageBehavior(), qSL("truncate"));
QCOMPARE(c.resources(), QStringList({ qSL("r1"), qSL("r2"), qSL("r3") }));
QCOMPARE(c.openGLConfiguration(), QVariantMap