Spec-Zone.ru › Qt 5.11

Класс QLoggingCategory

Класс QLoggingCategory представляет категорию, или «область» в инфраструктуре логирования. Подробнее...

Заголовок: #include <QLoggingCategory>
qmake: QT += core
С версии: Qt 5.2
  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются потокобезопасными.

Типы публичного доступа

typedef CategoryFilter

Функции публичного доступа

QLoggingCategory(const char *category)
QLoggingCategory(const char *category, QtMsgType enableForLevel)
~QLoggingCategory()
const char * categoryName() const
bool isCriticalEnabled() const
bool isDebugEnabled() const
bool isEnabled(QtMsgType msgtype) const
bool isInfoEnabled() const
bool isWarningEnabled() const
void setEnabled(QtMsgType type, bool enable)
QLoggingCategory & operator()()
const QLoggingCategory & operator()() const

Статические члены публичного доступа

QLoggingCategory * defaultCategory()
QLoggingCategory::CategoryFilter installFilter(QLoggingCategory::CategoryFilter filter)
void setFilterRules(const QString &rules)

Макросы

Q_DECLARE_LOGGING_CATEGORY(name)
Q_LOGGING_CATEGORY(name, string)
Q_LOGGING_CATEGORY(name, string, msgType)
qCCritical(category)
qCCritical(category, const char *message, ...)
qCDebug(category)
qCDebug(category, const char *message, ...)
qCInfo(category)
qCInfo(category, const char *message, ...)
qCWarning(category)
qCWarning(category, const char *message, ...)

Подробное описание

Класс QLoggingCategory представляет категорию или «область» в инфраструктуре ведения журнала.

QLoggingCategory представляет определённую категорию ведения журнала — идентифицируемую строкой — во время выполнения. Категория может быть настроена для включения или выключения ведения сообщений по типам сообщений. Включен или нет тип сообщения можно проверить с помощью методов isDebugEnabled(), isInfoEnabled(), isWarningEnabled() и isCriticalEnabled().

Все объекты предназначены для конфигурирования с помощью общего реестра (см. также Настройка категорий). Разные объекты также могут представлять одну и ту же категорию. Поэтому не рекомендуется экспортировать объекты через граничные модули, напрямую манипулировать объектами или наследоваться от QLoggingCategory.

Создание объектов категории

Макросы Q_DECLARE_LOGGING_CATEGORY() и Q_LOGGING_CATEGORY() удобно объявляют и создают объекты QLoggingCategory:

// in a header
Q_DECLARE_LOGGING_CATEGORY(driverUsb)

// in one source file
Q_LOGGING_CATEGORY(driverUsb, "driver.usb")

Примечание: Имена категорий являются текстом произвольной формы. Однако для удобной конфигурации категорий с использованием Правил ведения журнала имена должны следовать некоторым правилам:

  • Используйте только буквы и цифры.
  • Дальнейшая структура категорий в общие области путём использования точек.
  • Избегайте имён категорий debug, info, warning, и critical.
  • Имена категорий, начинающиеся с qt, зарезервированы для модулей Qt.

Объекты QLoggingCategory, неявно определённые макросом Q_LOGGING_CATEGORY(), создаются при первом использовании безопасным для потоков способом.

Проверка конфигурации категории

QLoggingCategory предоставляет isDebugEnabled(), isInfoEnabled(), isWarningEnabled(), isCriticalEnabled(), а также isEnabled() для проверки, должны ли сообщения для данного типа сообщения регистрироваться.

Примечание: Макросы qCDebug(), qCWarning(), qCCritical() предотвращают вычисление аргументов, если соответствующие типы сообщений не включены для категории, поэтому явная проверка не требуется:

    // usbEntries() will only be called if driverUsb category is enabled
    qCDebug(driverUsb) << "devices: " << usbEntries();

Настройка категории по умолчанию

Как конструктор QLoggingCategory, так и макрос Q_LOGGING_CATEGORY() принимают необязательный аргумент QtMsgType, который отключает все типы сообщений с меньшей степенью важности. То есть, категория, объявленная

Q_LOGGING_CATEGORY(driverUsbEvents, "driver.usb.events", QtWarningMsg)

будет регистрировать сообщения типа QtWarningMsg, QtCriticalMsg, QtFatalMsg, но проигнорирует сообщения типа QtDebugMsg и QtInfoMsg.

Если аргумент не передан, все сообщения будут записаны.

Настройка категорий

Значения по умолчанию для категорий могут быть изменены путем установки правил регистрации или установки пользовательского фильтра.

Правила регистрации

Правила регистрации позволяют гибко включать или отключать регистрацию для категорий. Правила задаются в текстовом формате, где каждая строка должна иметь формат

<category>[.<type>] = true|false

<category> — это имя категории, потенциально с * в качестве символа подстановки в начале или конце (или в обоих позициях). Необязательный <type> должен быть либо debug, либо info, либо warning, либо critical. Строки, не соответствующие этому формату, игнорируются.

Правила оцениваются в текстовом порядке, от первой к последней. То есть, если два правила применяются к категории/типу, применяется правило, которое стоит позже.

Правила можно установить с помощью setFilterRules():

QLoggingCategory::setFilterRules("*.debug=false\n"
                                 "driver.usb.debug=true");

Начиная с Qt 5.3, правила регистрации также автоматически загружаются из раздела [Rules] файла конфигурации регистрации. Такие файлы конфигурации ищутся в каталоге конфигурации QtProject или явно задаются в переменной среды QT_LOGGING_CONF.

[Rules]
*.debug=false
driver.usb.debug=true

Начиная с Qt 5.3, правила регистрации также можно указать в переменной среды QT_LOGGING_RULES. А начиная с Qt 5.6, несколько правил можно разделить точкой с запятой:

QT_LOGGING_RULES="*.debug=false;driver.usb.debug=true"

Правила, установленные с помощью setFilterRules(), имеют приоритет над правилами, указанными в каталоге конфигурации QtProject, и, в свою очередь, могут быть переопределены правилами из файла конфигурации, указанного QT_LOGGING_CONF, и правилами, установленными QT_LOGGING_RULES.

Порядок оценки:

  • [QLibraryInfo::DataPath]/qtlogging.ini
  • QtProject/qtlogging.ini
  • setFilterRules()
  • QT_LOGGING_CONF
  • QT_LOGGING_RULES

Файл QtProject/qtlogging.ini ищется во всех каталогах, возвращаемых QStandardPaths::GenericConfigLocation, например:

  • на macOS и iOS: ~/Library/Preferences
  • на Unix: ~/.config, /etc/xdg
  • на Windows: %LOCALAPPDATA%, %ProgramData%, QCoreApplication::applicationDirPath(), QCoreApplication::applicationDirPath() + "/data"

Установите переменную среды QT_LOGGING_DEBUG для просмотра, откуда загружаются правила регистрации.

Установка пользовательского фильтра

В качестве альтернативы текстовым правилам на более низком уровне вы также можете реализовать пользовательский фильтр с помощью installFilter(). Во всех случаях правила фильтра игнорируются.

Вывод категории

Используйте заполнитель %{category} для вывода категории в обработчике сообщений по умолчанию:

    qSetMessagePattern("%{category} %{message}");

Документация по типу членов

typedef QLoggingCategory::CategoryFilter

Это typedef для указателя на функцию со следующим сигнатурой:

void myCategoryFilter(QLoggingCategory *);

Функцию с этим сигнатурой можно установить с помощью installFilter().

Документация по функциям-членам

QLoggingCategory::QLoggingCategory(const char *category)

Создает объект QLoggingCategory с указанным именем категории category. Все типы сообщений для этой категории включены по умолчанию.

Если category — 0, имя категории изменяется на "default".

Обратите внимание, что category должен оставаться действительным в течение всего срока службы этого объекта.

QLoggingCategory::QLoggingCategory(const char *category, QtMsgType enableForLevel)

Создаёт объект QLoggingCategory с указанным именем категории category и включает все сообщения с типами, более серьёзными или равными enableForLevel.

Если category — 0, имя категории изменяется на "default".

Обратите внимание, что category должен оставаться действительным в течение всего срока службы этого объекта.

Эта функция была добавлена в Qt 5.4.

QLoggingCategory::~QLoggingCategory()

Удаляет объект QLoggingCategory.

const char *QLoggingCategory::categoryName() const

Возвращает имя категории.

[static] QLoggingCategory *QLoggingCategory::defaultCategory()

Возвращает указатель на глобальную категорию "default", которая используется, например, функциями qDebug(), qInfo(), qWarning(), qCritical(), qFatal().

Примечание: Возвращаемый указатель может быть нулевым во время уничтожения статических объектов.

Примечание: Владение категорией не передаётся, не delete возвращаемый указатель.

[static] QLoggingCategory::CategoryFilter QLoggingCategory::installFilter(QLoggingCategory::CategoryFilter filter)

Устанавливает функцию filter, которая используется для определения, какие категории и типы сообщений должны быть включены. Возвращает указатель на ранее установленный фильтр.

Каждый созданный объект QLoggingCategory передаётся в фильтр, и фильтр свободен изменять соответствующую конфигурацию категории с помощью setEnabled().

Фильтр может вызываться из разных потоков, но никогда не одновременно. Фильтр не должен вызывать какие-либо статические функции QLoggingCategory.

Пример:

QLoggingCategory::CategoryFilter oldCategoryFilter;

void myCategoryFilter(QLoggingCategory *category)
{
    // configure driver.usb category here, otherwise forward to to default filter.
    if (qstrcmp(category->categoryName(), "driver.usb") == 0)
        category->setEnabled(QtDebugMsg, true);
    else
        oldCategoryFilter(category);
}

Альтернативный способ конфигурирования фильтра по умолчанию — с помощью setFilterRules().

bool QLoggingCategory::isCriticalEnabled() const

Возвращает true , если критические сообщения должны отображаться для этой категории. Возвращает false в противном случае.

Примечание: Макро qCCritical() уже выполняет эту проверку перед выполнением кода. Однако, вызов этого метода может быть полезен для избежания дорогостоящего создания данных, которые используются только для отладки.

bool QLoggingCategory::isDebugEnabled() const

Возвращает true , если сообщения отладки должны отображаться для этой категории. Возвращает false в противном случае.

Примечание: Макро qCDebug() уже выполняет эту проверку перед выполнением кода. Однако, вызов этого метода может быть полезен для избежания дорогостоящего создания данных, которые используются только для отладки.

bool QLoggingCategory::isEnabled(QtMsgType msgtype) const

Возвращает true , если сообщение типа msgtype для категории должно быть отображено. Возвращает false в противном случае.

bool QLoggingCategory::isInfoEnabled() const

Возвращает true , если информационные сообщения должны отображаться для этой категории. Возвращает false в противном случае.

Примечание: Макро qCInfo() уже выполняет эту проверку перед выполнением кода. Однако, вызов этого метода может быть полезен для избежания дорогостоящего создания данных, которые используются только для отладки.

Функция была добавлена в Qt 5.5.

bool QLoggingCategory::isWarningEnabled() const

Возвращает true , если предупреждающие сообщения должны отображаться для этой категории. Возвращает false в противном случае.

Примечание: Макро qCWarning() уже выполняет эту проверку перед выполнением кода. Однако, вызов этого метода может быть полезен для избежания дорогостоящего создания данных, которые используются только для отладки.

void QLoggingCategory::setEnabled(QtMsgType type, bool enable)

Изменяет тип сообщения type для категории на enable.

Этот метод предназначен для использования только внутри фильтра, установленного с помощью installFilter(). См. Настройка категорий для обзора способов глобальной настройки категорий.

Примечание: QtFatalMsg изменить нельзя. Она всегда останется true.

См. также isEnabled().

[static] void QLoggingCategory::setFilterRules(const QString &rules)

Настраивает, какие категории и типы сообщений должны быть включены с помощью набора правил rules.

Пример:

    QLoggingCategory::setFilterRules(QStringLiteral("driver.usb.debug=true"));

Примечание: Правила могут быть проигнорированы, если установлен пользовательский фильтр категорий с помощью installFilter() или если пользователь определил QT_LOGGING_CONF или QT_LOGGING_RULES переменную окружения.

QLoggingCategory &QLoggingCategory::operator()()

Возвращает сам объект. Это позволяет использовать как переменную QLoggingCategory, так и метод фабрики, возвращающий QLoggingCategory, в макросах qCDebug(), qCWarning(), qCCritical().

const QLoggingCategory &QLoggingCategory::operator()() const

Возвращает сам объект. Это позволяет использовать как переменную QLoggingCategory, так и фабричный метод, возвращающий QLoggingCategory, в макросах qCDebug(), qCWarning(), qCCritical().

Документация макросов

Q_DECLARE_LOGGING_CATEGORY(name)

Объявляет категорию логгирования name. Макрос можно использовать для объявления общей категории логгирования, используемой в разных частях программы.

Этот макрос должен использоваться вне класса или метода.

Эта функция была введена в Qt 5.2.

См. также Q_LOGGING_CATEGORY().

Q_LOGGING_CATEGORY(name, string)

Определяет категорию логгирования name и делает её настраиваемой под идентификатором string. По умолчанию включены все типы сообщений.

Только один модуль перевода в библиотеке или исполняемом файле может определить категорию с определённым именем. Неявный объект QLoggingCategory создаётся при первом использовании в потокобезопасном режиме.

Этот макрос должен использоваться вне класса или метода.

Эта функция была введена в Qt 5.2.

См. также Q_DECLARE_LOGGING_CATEGORY().

Q_LOGGING_CATEGORY(name, string, msgType)

Определяет категорию логгирования name и делает её настраиваемой под идентификатором string. По умолчанию включены сообщения типа QtMsgType msgType и более серьёзные, типы с меньшей степенью серьёзности отключены.

Только один модуль перевода в библиотеке или исполняемом файле может определить категорию с определённым именем. Неявный объект QLoggingCategory создаётся при первом использовании в потокобезопасном режиме.

Этот макрос должен использоваться вне класса или метода. Он определён только при поддержке макросов с переменным числом аргументов.

Эта функция была введена в Qt 5.4.

См. также Q_DECLARE_LOGGING_CATEGORY().

qCCritical(category)

Возвращает поток вывода для критических сообщений в категории логгирования category.

Макрос раскрывается в код, проверяющий, равно ли значение QLoggingCategory::isCriticalEnabled() true. Если да, то аргументы потока обрабатываются и отправляются обработчику сообщений.

Пример:

    QLoggingCategory category("driver.usb");
    qCCritical(category) << "a critical message";

Примечание: Аргументы не обрабатываются, если критический вывод для категории не включён, поэтому не полагайтесь на побочные эффекты.

Примечание: Эта функция является потокобезопасной.

Эта функция была введена в Qt 5.2.

См. также qCritical().

qCCritical(category, const char *message, ...)

Записывает критическое сообщение message в категорию логгирования category. message может содержать заполнитель, который заменяется дополнительными аргументами, аналогично функции C printf().

Пример:

    QLoggingCategory category("driver.usb");
    qCCritical(category, "a critical message logged into category %s", category.categoryName());

Примечание: Аргументы могут не обрабатываться, если критический вывод для категории не включён, поэтому не полагайтесь на побочные эффекты.

Примечание: Эта функция является потокобезопасной.

Эта функция была введена в Qt 5.3.

См. также qCritical().

qCDebug(category)

Возвращает поток вывода для отладочных сообщений в категории логгирования category.

Макрос раскрывается в код, проверяющий, равно ли значение QLoggingCategory::isDebugEnabled() true. Если да, то аргументы потока обрабатываются и отправляются обработчику сообщений.

Пример:

    QLoggingCategory category("driver.usb");
    qCDebug(category) << "a debug message";

Примечание: Аргументы не обрабатываются, если отладочный вывод для категории не включён, поэтому не полагайтесь на побочные эффекты.

Примечание: Эта функция является потокобезопасной.

Эта функция была введена в Qt 5.2.

См. также qDebug().

qCDebug(category, const char *message, ...)

Записывает отладочное сообщение message в категорию логгирования category. message может содержать заполнитель, который заменяется дополнительными аргументами, аналогично функции C printf().

Пример:

    QLoggingCategory category("driver.usb");
    qCDebug(category, "a debug message logged into category %s", category.categoryName());

Примечание: Аргументы могут не обрабатываться, если отладочный вывод для категории не включён, поэтому не полагайтесь на побочные эффекты.

Примечание: Эта функция является потокобезопасной.

Эта функция была введена в Qt 5.3.

См. также qDebug().

qCInfo(category)

Возвращает поток вывода для информационных сообщений в категории логгирования category.

Макрос раскрывается в код, проверяющий, равно ли значение QLoggingCategory::isInfoEnabled() true. Если да, то аргументы потока обрабатываются и отправляются обработчику сообщений.

Пример:

    QLoggingCategory category("driver.usb");
    qCInfo(category) << "an informational message";

Примечание: Аргументы не обрабатываются, если отладочный вывод для категории не включён, поэтому не полагайтесь на побочные эффекты.

Примечание: Эта функция является потокобезопасной.

Эта функция была введена в Qt 5.5.

См. также qInfo().

qCInfo(category, const char *message, ...)

Записывает информационное сообщение message в категорию ведения журнала category. message может содержать заполнитель, который заменяется дополнительными аргументами, подобно функции C printf().

Пример:

    QLoggingCategory category("driver.usb");
    qCInfo(category, "an informational message logged into category %s", category.categoryName());

Примечание: Аргументы могут не обрабатываться, если вывод отладки для категории не включен, поэтому не полагайтесь на побочные эффекты.

Примечание: Эта функция безопасна для потоков.

Эта функция была добавлена в Qt 5.5.

См. также qInfo().

qCWarning(category)

Возвращает поток вывода для предупреждений в категории ведения журнала category.

Макрос расширяется до кода, который проверяет, является ли QLoggingCategory::isWarningEnabled() равным true. Если да, то аргументы потока обрабатываются и отправляются в обработчик сообщений.

Пример:

    QLoggingCategory category("driver.usb");
    qCWarning(category) << "a warning message";

Примечание: Аргументы не обрабатываются, если вывод предупреждений для категории не включен, поэтому не полагайтесь на побочные эффекты.

Примечание: Эта функция безопасна для потоков.

Эта функция была добавлена в Qt 5.2.

См. также qWarning().

qCWarning(category, const char *message, ...)

Записывает сообщение предупреждения message в категорию ведения журнала category. message может содержать заполнитель, который заменяется дополнительными аргументами, подобно функции C printf().

Пример:

    QLoggingCategory category("driver.usb");
    qCWarning(category, "a warning message logged into category %s", category.categoryName());

Примечание: Аргументы могут не обрабатываться, если вывод предупреждений для категории не включен, поэтому не полагайтесь на побочные эффекты.

Примечание: Эта функция безопасна для потоков.

Эта функция была добавлена в Qt 5.3.

См. также qWarning().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qloggingcategory.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API