Дополнительные возможности при отправке сообщений в журнал

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

В этом разделе описаны дополнительные возможности API библиотеки logrr_cpp: объединение сообщений, отправка сообщений по условию и отложенная отправка.

Объединение сообщений

Чтобы поэтапно получить текст записи журнала из частей и затем отправить запись в журнал одним вызовом:

  1. Скомпонуйте программу с библиотекой logrr_cpp.
  2. Подключите заголовочный файл component/logrr/cpp/tools.h.

    C++

    #include <component/logrr/cpp/tools.h>

  3. Создайте экземпляр класса LogIface.

    C++

    auto logger = LogIface(logrr::LogLevel::Warning);

  4. Заполните буфер сообщений одним или несколькими вызовами метода LogIface::Push().

    C++

    logger.Push("a={}", a);

    // ...

    logger.Push(", b={}", b);

    // ...

    logger.Push(", c={}", c);

  5. Отправьте ранее полученные сообщения в журнал с помощью метода LogIface::Flush().

    C++

    logger.Flush();

Отправка сообщения в журнал по условию

Чтобы отправить сообщение в журнал только при выполнении указанного условия:

  1. Скомпонуйте программу с библиотекой logrr_cpp.
  2. Подключите заголовочный файл component/logrr/cpp/tools.h.

    C++

    #include <component/logrr/cpp/tools.h>

  3. Передайте логическое значение, один из перечислителей LogLevel и текст сообщения в макрос LOG_IF().

    C++

    LOG_IF(IsWorldBroken(), logrr::LogLevel::Critical, "World is broken!");

Отложенная отправка сообщений в журнал

Макрос LOG_DEFER(), объявленный в заголовочном файле component/logrr/cpp/tools.h, позволяет избежать дублирования кода для журналирования в блоках if...else.

Чтобы отправить предварительно отформатированное сообщение в журнал в момент выхода из функции:

  1. Скомпонуйте программу с библиотекой logrr_cpp.
  2. Подключите заголовочный файл component/logrr/cpp/tools.h.

    C++

    #include <component/logrr/cpp/tools.h>

  3. Добавьте вызов макроса LOG_DEFER() в начало кода функции, изменяющей значения, которые нужно отправить в журнал. В макрос передайте значение LogLevel, строку форматирования сообщения и аргументы для подстановки в строку форматирования.

    C++

    int DeferredLoggingExample()

    {

    auto logger = LOG_DEFER(logrr::LogLevel::Info, "a={}, b={}", a, b);

    if (someCondition)

    {

    a = 1;

    b = 2;

    return -1;

    }

    else

    {

    a = 3;

    b = 4;

    return 0;

    }

    }

В этом примере, сообщение отправляется в журнал при вызове деструктора объекта logger на выходе из функции DeferredLoggingExample(). В строку форматирования сообщения подставляются значения a и b, актуальные на момент выхода из функции.

В начало