Класс LogIface
23 января 2025
ID 244683
Класс LogIface содержит методы, позволяющие поэтапно получить текст записи журнала из частей, и затем отправить запись в журнал одним вызовом:
- Для установки уровня журналирования отправляемых сообщений используется метод
SetLogLevel(). - Для добавления текста к сообщению используется метод
Push(). - Для отправки составленного одним или несколькими вызовами метода
Push()сообщения в журнал используется методFlush().При вызове деструктора
~LogIface()в журнал также отправляется составленное вызовамиPush()сообщение, если оно не было ранее отправлено с помощьюFlush(). - Для немедленной отправки отдельного сообщения (без использования составленного вызовами
Push()текста) используется методLog().
Чтобы создать экземпляр класса LogIface, передайте один из перечислителей LogLevel в конструктор класса. Пример использования функций класса LogIface представлен в подразделе "Объединение сообщений" раздела "Дополнительные возможности при отправке сообщений в журнал".
Описание класса LogIface представлено в файле /opt/KasperskyOS-SDK-KISG-Platform-<version>/sysroot-*-kos/component/logrr/cpp/tools.h.
component/logrr/cpp/tools.h (фрагмент)
/**
* @brief C++ frontend interface for logrr for simple printing and queuing logs
* */
class LogIface
{
// ...
public:
LogIface(logrr::LogLevel level, sl::source_location loc = sl::source_location::current()) : m_level(level), m_defaultSourceLocation(loc)
{}
void SetLogLevel(logrr::LogLevel new_level)
{
m_level = new_level;
}
/**
* @brief Append new format with args to current message template
* */
template <typename... Args>
void Push(std::string_view frmt, Args&&... args)
{
AppendFormat(m_message, frmt, std::forward<Args>(args)...);
}
/**
* @brief Log instantly through separate Log command
* */
template <typename... Args>
void Log(FormatWithLocation frmt, Args&&... args)
{
Flush_(frmt.loc, frmt.frmt, std::forward<Args>(args)...);
}
/**
* @brief Flush current message, built with Push, to Log
* */
void Flush(const sl::source_location& loc = sl::source_location::current())
{
Flush_(loc, m_message);
m_message.clear();
}
~LogIface()
{
if (!m_message.empty())
{
Flush_(m_defaultSourceLocation, m_message);
}
}
// ...
};