diff options
author | Kai Koehne <kai.koehne@theqtcompany.com> | 2015-06-19 13:38:58 +0200 |
---|---|---|
committer | Kai Koehne <kai.koehne@theqtcompany.com> | 2015-08-24 07:17:29 +0000 |
commit | cb6ab056480e39ed347d5a75e4b1b1f34443148c (patch) | |
tree | ec027691bcb19707cd98448034a2680f8828b681 /src/corelib/io/qloggingregistry.cpp | |
parent | 5c95c2077ce480a2a0192babbe5efe1e23731633 (diff) |
QLoggingRegistry: Look up logging configuration in Qt data path
Distributions like Fedora would like to disable logging globally, without
having to patch Qt. Fedora right now therefore adds a
/etc/xdg/qtlogging.ini file, which unfortunately though also messes with
Qt versions compiled by the user.
This patch lets QLoggingRegistry look up logging configurations also
in QLibraryInfo::DataPath, which would allow to tweak the values per
Qt installation.
See also https://bugzilla.redhat.com/show_bug.cgi?id=1227295
Change-Id: I0fca304a47f45739d0c08a9e4e715673bf10aa80
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Diffstat (limited to 'src/corelib/io/qloggingregistry.cpp')
-rw-r--r-- | src/corelib/io/qloggingregistry.cpp | 64 |
1 files changed, 35 insertions, 29 deletions
diff --git a/src/corelib/io/qloggingregistry.cpp b/src/corelib/io/qloggingregistry.cpp index f0b72cd9be..b53e251102 100644 --- a/src/corelib/io/qloggingregistry.cpp +++ b/src/corelib/io/qloggingregistry.cpp @@ -34,6 +34,7 @@ #include "qloggingregistry_p.h" #include <QtCore/qfile.h> +#include <QtCore/qlibraryinfo.h> #include <QtCore/qstandardpaths.h> #include <QtCore/qtextstream.h> #include <QtCore/qdir.h> @@ -247,6 +248,21 @@ static bool qtLoggingDebug() return debugEnv; } +static QVector<QLoggingRule> loadRulesFromFile(const QString &filePath) +{ + QFile file(filePath); + if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { + if (qtLoggingDebug()) + debugMsg("Loading \"%s\" ...", + QDir::toNativeSeparators(file.fileName()).toUtf8().constData()); + QTextStream stream(&file); + QLoggingSettingsParser parser; + parser.setContent(stream); + return parser.rules(); + } + return QVector<QLoggingRule>(); +} + /*! \internal Initializes the rules database by loading @@ -256,18 +272,9 @@ void QLoggingRegistry::init() { // get rules from environment const QByteArray rulesFilePath = qgetenv("QT_LOGGING_CONF"); - if (!rulesFilePath.isEmpty()) { - QFile file(QFile::decodeName(rulesFilePath)); - if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { - if (qtLoggingDebug()) - debugMsg("Loading \"%s\" ...", - QDir::toNativeSeparators(file.fileName()).toUtf8().constData()); - QTextStream stream(&file); - QLoggingSettingsParser parser; - parser.setContent(stream); - envRules = parser.rules(); - } - } + if (!rulesFilePath.isEmpty()) + envRules = loadRulesFromFile(QFile::decodeName(rulesFilePath)); + const QByteArray rulesSrc = qgetenv("QT_LOGGING_RULES").replace(';', '\n'); if (!rulesSrc.isEmpty()) { QTextStream stream(rulesSrc); @@ -277,23 +284,22 @@ void QLoggingRegistry::init() envRules += parser.rules(); } - // get rules from qt configuration - QString envPath = QStandardPaths::locate(QStandardPaths::GenericConfigLocation, - QStringLiteral("QtProject/qtlogging.ini")); - if (!envPath.isEmpty()) { - QFile file(envPath); - if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { - if (qtLoggingDebug()) - debugMsg("Loading \"%s\" ...", - QDir::toNativeSeparators(envPath).toUtf8().constData()); - QTextStream stream(&file); - QLoggingSettingsParser parser; - parser.setContent(stream); - configRules = parser.rules(); - } - } + const QString configFileName = QStringLiteral("qtlogging.ini"); + +#if !defined(QT_BOOTSTRAPPED) + // get rules from Qt data configuration path + const QString qtConfigPath + = QDir(QLibraryInfo::location(QLibraryInfo::DataPath)).absoluteFilePath(configFileName); + qtConfigRules = loadRulesFromFile(qtConfigPath); +#endif + + // get rules from user's/system configuration + const QString envPath = QStandardPaths::locate(QStandardPaths::GenericConfigLocation, + QString::fromLatin1("QtProject/") + configFileName); + if (!envPath.isEmpty()) + configRules = loadRulesFromFile(envPath); - if (!envRules.isEmpty() || !configRules.isEmpty()) { + if (!envRules.isEmpty() || !qtConfigRules.isEmpty() || !configRules.isEmpty()) { QMutexLocker locker(®istryMutex); updateRules(); } @@ -356,7 +362,7 @@ void QLoggingRegistry::updateRules() if (categoryFilter != defaultCategoryFilter) return; - rules = configRules + apiRules + envRules; + rules = qtConfigRules + configRules + apiRules + envRules; foreach (QLoggingCategory *cat, categories.keys()) (*categoryFilter)(cat); |