Класс Logger и макрос LOG

Класс Logger предоставляет статический метод Logger::Log(), который выполняет запись в журнал.

Класс Logger предназначен для использования в программах на языке C++. В программах на языке C используйте статическую функцию ClogLog() или макрос CLOG.

Описание класса Logger и макросов для быстрого доступа к методу Logger::Log() представлены в файле /opt/KasperskyOS-SDK-KISG-Platform-<version>/sysroot-*-kos/component/logrr/cpp/logger.h.

components/logrr/cpp/logger.h (фрагмент)

namespace logrr {

class Logger

{

public:

static void Init(std::string_view frontendId)

{

logrr::GetInnerLogImpl(frontendId);

}

template <typename... Args>

static void Log(logrr::LogLevel logLevel, sl::source_location sourceLocation, std::string_view format, Args&&... args)

{

Log(logLevel, sourceLocation.file_name(), sourceLocation.line(),

sourceLocation.function_name(), format, std::forward<Args>(args)...);

}

template <typename... Args>

static void Log(std::string_view module, logrr::LogLevel logLevel, sl::source_location sourceLocation,

std::string_view format, Args&&... args)

{

Log(module, logLevel, sourceLocation.file_name(), sourceLocation.line(),

sourceLocation.function_name(), format, std::forward<Args>(args)...);

}

template <typename... Args>

static void Log(logrr::LogLevel logLevel, std::string_view file, const uint32_t line,

std::string_view function, std::string_view format, Args&&... args)

{

Log("", logLevel, file, line, function, format, std::forward<Args>(args)...);

}

template <typename... Args>

static void Log(std::string_view module, logrr::LogLevel logLevel, std::string_view file, const uint32_t line,

std::string_view function, std::string_view format, Args&&... args)

{

if (logrr::GetInnerLogImpl().ShouldLog(logLevel))

{

constexpr auto MaxLength = static_cast<std::size_t>(kosipc::stdcpp::logrr::MaxMessageStringSize - 1);

if constexpr (!sizeof...(args))

{

logrr::GetInnerLogImpl().Log(module, logLevel, file, line, function, format.substr(0, MaxLength));

}

else

{

std::string_view str;

fmt::memory_buffer buf{};

buf.reserve(MaxLength);

fmt::format_to_n(

std::back_inserter(buf),

MaxLength,

format, args...);

str = std::string_view{buf.data(), buf.size()};

logrr::GetInnerLogImpl().Log(module, logLevel, file, line, function, str);

}

}

}

};

} // namespace logrr

#define __CPPLOG_LEVEL_TRACE__ logrr::LogLevel::Trace

#define __CPPLOG_LEVEL_DEBUG__ logrr::LogLevel::Debug

#define __CPPLOG_LEVEL_INFO__ logrr::LogLevel::Info

#define __CPPLOG_LEVEL_WARNING__ logrr::LogLevel::Warning

#define __CPPLOG_LEVEL_ERROR__ logrr::LogLevel::Error

#define __CPPLOG_LEVEL_CRITICAL__ logrr::LogLevel::Critical

#define CALL_LOG(level, ...) \

logrr::Logger::Log(LOG_MODULE, level, sl::source_location::current(), __VA_ARGS__)

#define LOG(level, ...) CALL_LOG(__CPPLOG_LEVEL_ ## level ## __, __VA_ARGS__)

Метод Log()

Статический метод Log() выполняет запись в журнал.

Параметры метода:

Макрос быстрого доступа к методу Log()

Вместо вызова статического метода Logger::Log() вы можете использовать макрос, описание которого представлено в файле components/logrr/cpp/logger.h. Этот макрос является вариационным (принимает переменное число параметров), что позволяет не указывать все параметры метода Logger::Log(). При вызове макроса достаточно указать только уровень журналирования и строку форматирования сообщения со значениями параметров. Используемый уровень журналирования logLevel определяется первым параметром макроса: Пример использования этого макросов представлен в разделе "Отправка сообщений в журнал с помощью макросов".

В начало