Класс QLoggingCategory
Класс QLoggingCategory представляет категорию или «область» в инфраструктуре ведения журналов. Подробнее...
| Заголовок: | #include <QLoggingCategory> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| С момента: | Qt 5.2 |
Примечание: Все функции в этом классе являются безопасными для потоков.
Типы общедоступного доступа
| CategoryFilter |
Общедоступные функции
| QLoggingCategory(const char *category, QtMsgType enableForLevel = QtDebugMsg) | |
| ~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, msgType) | |
| Q_LOGGING_CATEGORY(name, string) | |
| qCCritical(category, const char *message, ...) | |
| qCCritical(category) | |
| qCDebug(category, const char *message, ...) | |
| qCDebug(category) | |
| qCInfo(category, const char *message, ...) | |
| qCInfo(category) | |
| qCWarning(category, const char *message, ...) | |
| qCWarning(category) |
Подробное описание
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.
Если аргумент не передан, все сообщения записываются в журнал. Только внутренние категории Qt, начинающиеся с qt, обрабатываются по-другому: для них по умолчанию записываются только сообщения типа QtInfoMsg, QtWarningMsg и QtCriticalMsg.
Примечание: Категории ведения журнала не зависят от вашей конфигурации сборки C++. То есть, вывод сообщений не меняется в зависимости от того, скомпилирован ли код с символами отладки ('Debug Build'), оптимизациями ('Release Build') или какой-либо другой комбинацией.
Настройка категорий
Вы можете переопределить конфигурацию по умолчанию для категорий, либо установив правила ведения журнала, либо установив пользовательский фильтр.
Правила ведения журнала
Правила ведения журнала позволяют гибко включать или отключать ведение журнала для категорий. Правила задаются в текстовой форме, где каждая строка должна иметь формат:
<category>[.<type>] = true|false
<category> — это имя категории, потенциально с * в качестве символа подстановки для первого или последнего символа; или в обоих позициях. Необязательный <type> должен быть debug, info, warning или critical. Строки, не соответствующие этому формату, игнорируются.
Правила оцениваются в порядке следования в тексте, от первой к последней. То есть, если два правила применимы к категории/типу, применяется правило, которое идёт позже.
Правила могут быть заданы через setFilterRules():
QLoggingCategory::setFilterRules("*.debug=false\n"
"driver.usb.debug=true"); END_OF_DOCUMENT_MARKER Правила ведения журнала автоматически загружаются из раздела [Rules] в файле конфигурации журнала. Эти файлы конфигурации ищутся в каталоге конфигурации QtProject или явно задаются в переменной окружения QT_LOGGING_CONF:
[Rules]
*.debug=false
driver.usb.debug=true Правила ведения журнала также можно указать в переменной окружения QT_LOGGING_RULES; несколько правил также можно разделить точкой с запятой:
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_CONFQT_LOGGING_RULES
Файл QtProject/qtlogging.ini ищется во всех каталогах, возвращаемых QStandardPaths::GenericConfigLocation.
Установите переменную окружения QT_LOGGING_DEBUG, чтобы узнать, откуда загружаются ваши правила ведения журнала.
Установка пользовательского фильтра
В качестве альтернативы текстовым правилам, вы также можете реализовать пользовательский фильтр с помощью installFilter(). Все правила фильтрации в этом случае игнорируются.
Вывод категории
Используйте заполнитель %{category} для вывода категории в обработчике сообщений по умолчанию:
qSetMessagePattern("%{category} %{message}"); Документация по типам членов
QLoggingCategory::CategoryFilter
Это псевдоним для указателя на функцию со следующим сигнатурой:
void myCategoryFilter(QLoggingCategory *);
Функция с этой сигнатурой может быть установлена с помощью installFilter().
Документация по функциям-членам
[since 5.4] QLoggingCategory::QLoggingCategory(const char *category, QtMsgType enableForLevel = QtDebugMsg)
Создает объект QLoggingCategory с указанным именем категории category и включает все сообщения с типами, по крайней мере, столь же подробными, как enableForLevel, которое по умолчанию равно QtDebugMsg (что включает все категории).
Если category равно nullptr, имя категории "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 в противном случае.
[since 5.5] 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().
Документация макросов
[since 5.2] Q_DECLARE_LOGGING_CATEGORY(name)
Объявляет категорию логов name. Макрос можно использовать для объявления общей категории логов, используемой в разных частях программы.
Этот макрос должен использоваться вне класса или метода.
Эта функция была введена в Qt 5.2.
См. также Q_LOGGING_CATEGORY().
[since 5.4] Q_LOGGING_CATEGORY(name, string, msgType)
Определяет категорию логов name и делает её настраиваемой под идентификатор string. По умолчанию включены сообщения типа QtMsgType msgType и более серьёзные, типы с более низким уровнем серьёзности отключены.
Только один модуль трансляции в библиотеке или исполняемом файле может определить категорию с конкретным именем. Неявный объект QLoggingCategory создаётся при первом использовании в потокобезопасном режиме.
Этот макрос должен использоваться вне класса или метода. Он определён только если поддерживаются макросы с переменным числом аргументов.
Эта функция была введена в Qt 5.4.
См. также Q_DECLARE_LOGGING_CATEGORY().
[since 5.2] Q_LOGGING_CATEGORY(name, string)
Определяет категорию логов name и делает её настраиваемой под идентификатор string. По умолчанию включены все типы сообщений.
Только один модуль трансляции в библиотеке или исполняемом файле может определить категорию с конкретным именем. Неявный объект QLoggingCategory создаётся при первом использовании в потокобезопасном режиме.
Этот макрос должен использоваться вне класса или метода.
Эта функция была введена в Qt 5.2.
См. также Q_DECLARE_LOGGING_CATEGORY().
[since 5.3] 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().
[since 5.2] qCCritical(category)
Возвращает поток вывода для критических сообщений в категории логов category.
Макрос расширяется до кода, проверяющего, равняется ли QLoggingCategory::isCriticalEnabled() значению true. Если да, аргументы потока обрабатываются и отправляются обработчику сообщений.
Пример:
QLoggingCategory category("driver.usb");
qCCritical(category) << "a critical message"; Примечание: Если критический вывод для определённой категории не включён, аргументы не будут обработаны, поэтому не полагайтесь на побочные эффекты.
Эта функция была введена в Qt 5.2.
См. также qCritical().
[since 5.3] 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()); Примечание: Аргументы не обрабатываются, если отладочный вывод для данной категории category не включён, поэтому не полагайтесь на побочные эффекты.
Эта функция была введена в Qt 5.3.
См. также qDebug().
[since 5.2] qCDebug(category)
Возвращает поток вывода для отладочных сообщений в категории логов category.
Макрос расширяется до кода, проверяющего, равняется ли QLoggingCategory::isDebugEnabled() значению true. Если да, аргументы потока обрабатываются и отправляются обработчику сообщений.
Пример:
QLoggingCategory category("driver.usb");
qCDebug(category) << "a debug message"; Примечание: Аргументы не обрабатываются, если отладочный вывод для данной категории category не включён, поэтому не полагайтесь на побочные эффекты.
Эта функция была введена в Qt 5.2.
См. также qDebug().
[since 5.5] 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().
[since 5.5] qCInfo(category)
Возвращает поток вывода для информационных сообщений в категории логов category.
Макрос расширяется до кода, проверяющего, равняется ли QLoggingCategory::isInfoEnabled() значению true. Если да, аргументы потока обрабатываются и отправляются обработчику сообщений.
Пример:
QLoggingCategory category("driver.usb");
qCInfo(category) << "an informational message"; Примечание: Если отладочный вывод для определённой категории не включён, аргументы не будут обработаны, поэтому не полагайтесь на побочные эффекты.
Эта функция была введена в Qt 5.5.
См. также qInfo().
[since 5.3] 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().
[since 5.2] qCWarning(category)
Возвращает поток вывода для предупреждающих сообщений в категории логов category.
Макрос расширяется до кода, проверяющего, равняется ли QLoggingCategory::isWarningEnabled() значению true. Если да, аргументы потока обрабатываются и отправляются обработчику сообщений.
Пример:
QLoggingCategory category("driver.usb");
qCWarning(category) << "a warning message"; Примечание: Если предупреждающий вывод для определённой категории не включён, аргументы не будут обработаны, поэтому не полагайтесь на побочные эффекты.
Эта функция была введена в Qt 5.2.
См. также qWarning().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qloggingcategory.html