diff options
Diffstat (limited to 'src/corelib/io/qloggingcategory.cpp')
-rw-r--r-- | src/corelib/io/qloggingcategory.cpp | 88 |
1 files changed, 66 insertions, 22 deletions
diff --git a/src/corelib/io/qloggingcategory.cpp b/src/corelib/io/qloggingcategory.cpp index 07245ddea2..a368e92932 100644 --- a/src/corelib/io/qloggingcategory.cpp +++ b/src/corelib/io/qloggingcategory.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -40,7 +40,6 @@ ****************************************************************************/ #include "qloggingcategory.h" -#include "qloggingcategory_p.h" #include "qloggingregistry_p.h" QT_BEGIN_NAMESPACE @@ -82,7 +81,7 @@ static void setBoolLane(QBasicAtomicInt *atomic, bool enable, int shift) \section1 Creating category objects - The Q_LOGGING_CATEGORY() and the Q_DECLARE_LOGGING_CATEGORY() macros + The Q_DECLARE_LOGGING_CATEGORY() and Q_LOGGING_CATEGORY() macros conveniently declare and create QLoggingCategory objects: \snippet qloggingcategory/main.cpp 1 @@ -101,13 +100,21 @@ static void setBoolLane(QBasicAtomicInt *atomic, bool enable, int shift) \section1 Default category configuration - In the default configuration \l isWarningEnabled() , \l isDebugEnabled() and - \l isCriticalEnabled() will return \c true. + Both the QLoggingCategory constructor and the Q_LOGGING_CATEGORY() macro + accept an optional QtMsgType argument, which disables all message types with + a lower severity. That is, a category declared with + + \snippet qloggingcategory/main.cpp 5 + + will log messages of type \c QtWarningMsg, \c QtCriticalMsg, \c QtFatalMsg, but will + ignore messages of type \c QtDebugMsg. + + If no argument is passed, all messages will be logged. \section1 Configuring Categories - Categories can be centrally configured by either setting logging rules, - or by installing a custom filter. + The default configuration of categories can be overridden either by setting logging + rules, or by installing a custom filter. \section2 Logging Rules @@ -131,7 +138,13 @@ static void setBoolLane(QBasicAtomicInt *atomic, bool enable, int shift) are automatically loaded from the \c [Rules] section of a logging configuration file. Such configuration files are looked up in the QtProject configuration directory, or explicitly set in a \c QT_LOGGING_CONF - environment variable. + environment variable: + + \code + [Rules] + *.debug=false + driver.usb.debug=true + \endcode Rules set by \l setFilterRules() take precedence over rules specified in the QtProject configuration directory, and can, in turn, be @@ -177,7 +190,7 @@ static void setBoolLane(QBasicAtomicInt *atomic, bool enable, int shift) /*! Constructs a QLoggingCategory object with the provided \a category name. - The object becomes the local identifier for the category. + All message types for this category are enabled by default. If \a category is \c{0}, the category name is changed to \c "default". */ @@ -185,23 +198,35 @@ QLoggingCategory::QLoggingCategory(const char *category) : d(0), name(0) { - Q_UNUSED(d); - Q_UNUSED(placeholder); - enabled.store(0x01010101); // enabledDebug = enabledWarning = enabledCritical = true; + init(category, QtDebugMsg); +} - const bool isDefaultCategory - = (category == 0) || (strcmp(category, qtDefaultCategoryName) == 0); +/*! + Constructs a QLoggingCategory object with the provided \a category name, + and enables all messages with types more severe or equal than \a enableForLevel. - // normalize "default" category name, so that we can just do - // pointer comparison in QLoggingRegistry::updateCategory - if (isDefaultCategory) { - name = qtDefaultCategoryName; - } else { + If \a category is \c{0}, the category name is changed to \c "default". + + \since 5.4 +*/ +QLoggingCategory::QLoggingCategory(const char *category, QtMsgType enableForLevel) + : d(0), + name(0) +{ + init(category, enableForLevel); +} + +void QLoggingCategory::init(const char *category, QtMsgType severityLevel) +{ + enabled.store(0x01010101); // enabledDebug = enabledWarning = enabledCritical = true; + + if (category) name = category; - } + else + name = qtDefaultCategoryName; if (QLoggingRegistry *reg = QLoggingRegistry::instance()) - reg->registerCategory(this); + reg->registerCategory(this, severityLevel); } /*! @@ -501,6 +526,7 @@ void QLoggingCategory::setFilterRules(const QString &rules) */ /*! \macro Q_DECLARE_LOGGING_CATEGORY(name) + \sa Q_LOGGING_CATEGORY() \relates QLoggingCategory \since 5.2 @@ -512,11 +538,12 @@ void QLoggingCategory::setFilterRules(const QString &rules) /*! \macro Q_LOGGING_CATEGORY(name, string) + \sa Q_DECLARE_LOGGING_CATEGORY() \relates QLoggingCategory \since 5.2 Defines a logging category \a name, and makes it configurable under the - \a string identifier. + \a string identifier. By default, all message types are enabled. Only one translation unit in a library or executable can define a category with a specific name. @@ -524,4 +551,21 @@ void QLoggingCategory::setFilterRules(const QString &rules) This macro must be used outside of a class or method. */ +/*! + \macro Q_LOGGING_CATEGORY(name, string, msgType) + \sa Q_DECLARE_LOGGING_CATEGORY() + \relates QLoggingCategory + \since 5.4 + + Defines a logging category \a name, and makes it configurable under the + \a string identifier. By default, messages of QtMsgType \a msgType + and more severe are enabled, types with a lower severity are disabled. + + Only one translation unit in a library or executable can define a category + with a specific name. + + This macro must be used outside of a class or method. It is only defined + if variadic macros are supported. +*/ + QT_END_NAMESPACE |