Kaspersky IoT Secure Gateway 1000 SDK

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

30 июля 2024

ID 245261

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

В этом разделе описаны дополнительные возможности 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, актуальные на момент выхода из функции.

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!