diff options
author | Robert Griebl <robert.griebl@qt.io> | 2022-02-23 13:41:31 +0100 |
---|---|---|
committer | Robert Griebl <robert.griebl@qt.io> | 2022-02-25 12:39:22 +0100 |
commit | 1acd11515aaf37b535791ddec0bd9698ad34de59 (patch) | |
tree | bba72cc3f7b4425ca9f21935cccdf914d6d2f5d0 | |
parent | 6b50bedfbf0451440da0d6c269737876cf66b3fb (diff) | |
download | qtapplicationmanager-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.qdoc | 8 | ||||
-rw-r--r-- | src/common-lib/logging.cpp | 24 | ||||
-rw-r--r-- | src/common-lib/logging.h | 3 | ||||
-rw-r--r-- | src/launcher-lib/launchermain.cpp | 6 | ||||
-rw-r--r-- | src/launcher-lib/launchermain.h | 2 | ||||
-rw-r--r-- | src/main-lib/configuration.cpp | 22 | ||||
-rw-r--r-- | src/main-lib/configuration.h | 2 | ||||
-rw-r--r-- | src/main-lib/configuration_p.h | 1 | ||||
-rw-r--r-- | src/main-lib/main.cpp | 1 | ||||
-rw-r--r-- | src/manager-lib/nativeruntime.cpp | 3 | ||||
-rw-r--r-- | src/tools/launcher-qml/launcher-qml.cpp | 2 | ||||
-rw-r--r-- | tests/auto/configuration/data/config1.yaml | 1 | ||||
-rw-r--r-- | tests/auto/configuration/data/config2.yaml | 1 | ||||
-rw-r--r-- | tests/auto/configuration/tst_configuration.cpp | 2 |
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 |