diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/io/qloggingregistry.cpp | 50 | ||||
-rw-r--r-- | src/corelib/io/qloggingregistry_p.h | 16 |
2 files changed, 33 insertions, 33 deletions
diff --git a/src/corelib/io/qloggingregistry.cpp b/src/corelib/io/qloggingregistry.cpp index 47fb1fb6b8..0e7eaeea76 100644 --- a/src/corelib/io/qloggingregistry.cpp +++ b/src/corelib/io/qloggingregistry.cpp @@ -317,13 +317,12 @@ void QLoggingRegistry::init() const QMutexLocker locker(®istryMutex); - envRules = std::move(er); - qtConfigRules = std::move(qr); - configRules = std::move(cr); + ruleSets[EnvironmentRules] = std::move(er); + ruleSets[QtConfigRules] = std::move(qr); + ruleSets[ConfigRules] = std::move(cr); - if (!envRules.isEmpty() || !qtConfigRules.isEmpty() || !configRules.isEmpty()) { + if (!ruleSets[EnvironmentRules].isEmpty() || !ruleSets[QtConfigRules].isEmpty() || !ruleSets[ConfigRules].isEmpty()) updateRules(); - } } /*! @@ -367,7 +366,7 @@ void QLoggingRegistry::setApiRules(const QString &content) const QMutexLocker locker(®istryMutex); - apiRules = parser.rules(); + ruleSets[ApiRules] = parser.rules(); updateRules(); } @@ -380,13 +379,6 @@ void QLoggingRegistry::setApiRules(const QString &content) */ void QLoggingRegistry::updateRules() { - rules.clear(); - rules.reserve(qtConfigRules.size() + configRules.size() + apiRules.size() + envRules.size()), - rules += qtConfigRules; - rules += configRules; - rules += apiRules; - rules += envRules; - for (auto it = categories.keyBegin(), end = categories.keyEnd(); it != end; ++it) (*categoryFilter)(*it); } @@ -406,8 +398,7 @@ QLoggingRegistry::installFilter(QLoggingCategory::CategoryFilter filter) QLoggingCategory::CategoryFilter old = categoryFilter; categoryFilter = filter; - for (auto it = categories.keyBegin(), end = categories.keyEnd(); it != end; ++it) - (*categoryFilter)(*it); + updateRules(); return old; } @@ -446,19 +437,22 @@ void QLoggingRegistry::defaultCategoryFilter(QLoggingCategory *cat) } QString categoryName = QLatin1String(cat->categoryName()); - for (const QLoggingRule &item : reg->rules) { - int filterpass = item.pass(categoryName, QtDebugMsg); - if (filterpass != 0) - debug = (filterpass > 0); - filterpass = item.pass(categoryName, QtInfoMsg); - if (filterpass != 0) - info = (filterpass > 0); - filterpass = item.pass(categoryName, QtWarningMsg); - if (filterpass != 0) - warning = (filterpass > 0); - filterpass = item.pass(categoryName, QtCriticalMsg); - if (filterpass != 0) - critical = (filterpass > 0); + + for (const auto &ruleSet : reg->ruleSets) { + for (const auto &rule : ruleSet) { + int filterpass = rule.pass(categoryName, QtDebugMsg); + if (filterpass != 0) + debug = (filterpass > 0); + filterpass = rule.pass(categoryName, QtInfoMsg); + if (filterpass != 0) + info = (filterpass > 0); + filterpass = rule.pass(categoryName, QtWarningMsg); + if (filterpass != 0) + warning = (filterpass > 0); + filterpass = rule.pass(categoryName, QtCriticalMsg); + if (filterpass != 0) + critical = (filterpass > 0); + } } cat->setEnabled(QtDebugMsg, debug); diff --git a/src/corelib/io/qloggingregistry_p.h b/src/corelib/io/qloggingregistry_p.h index 69fc6ea4ec..a68b993cca 100644 --- a/src/corelib/io/qloggingregistry_p.h +++ b/src/corelib/io/qloggingregistry_p.h @@ -130,14 +130,20 @@ private: static void defaultCategoryFilter(QLoggingCategory *category); + enum RuleSet { + // sorted by order in which defaultCategoryFilter considers them: + QtConfigRules, + ConfigRules, + ApiRules, + EnvironmentRules, + + NumRuleSets + }; + QMutex registryMutex; // protected by mutex: - QVector<QLoggingRule> qtConfigRules; - QVector<QLoggingRule> configRules; - QVector<QLoggingRule> envRules; - QVector<QLoggingRule> apiRules; - QVector<QLoggingRule> rules; + QVector<QLoggingRule> ruleSets[NumRuleSets]; QHash<QLoggingCategory*,QtMsgType> categories; QLoggingCategory::CategoryFilter categoryFilter; |