Класс 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() выполняет запись в журнал.
Параметры метода:
logLevelУровень журналирования LogLevel.
sourceLocationОбъект, определяющий местоположение в исходном коде (имя файла, имя функции, номер строки и номер столбца). В C++20 используется класс std::source_location, в более ранних версиях используется класс std::experimental::source_location.
formatСтрока форматирования текста сообщения.
argsПараметры для подстановки в строку форматирования format.
Макрос быстрого доступа к методу Log()
Вместо вызова статического метода Logger::Log() вы можете использовать макрос, описание которого представлено в файле components/logrr/cpp/logger.h. Этот макрос является вариационным (принимает переменное число параметров), что позволяет не указывать все параметры метода Logger::Log(). При вызове макроса достаточно указать только уровень журналирования и строку форматирования сообщения со значениями параметров. Используемый уровень журналирования logLevel определяется первым параметром макроса: Пример использования этого макросов представлен в разделе "Отправка сообщений в журнал с помощью макросов".