Program Listing for File BaseLogger.h
↰ Return to documentation for file (axr.sdk/logging/BaseLogger.h
)
// Copyright (C) AcceleratXR, Inc. All rights reserved.
//
// Author: Jean-Philippe Steinmetz <info@acceleratxr.com>
#pragma once
#include <cstdio>
#include <cpprest/details/basic_types.h>
#include <fmt/core.h>
#include <fmt/xchar.h>
namespace spdlog
{
class logger;
}
namespace axr
{
namespace sdk
{
namespace logging
{
enum class LogLevel
{
TRACE,
DEBUG,
INFO,
WARN,
ERR,
CRITICAL,
OFF
};
class BaseLogger
{
public:
BaseLogger() = default;
BaseLogger(std::shared_ptr<spdlog::logger> spdlog) : Spdlog(spdlog) {}
virtual ~BaseLogger() = default;
LogLevel GetLogLevel() { return Level; }
virtual void SetLogLevel(const LogLevel level)
{
Level = level;
}
template<typename ...Args>
void trace(const utility::string_t& fmt, Args &&...args)
{
log(LogLevel::TRACE, fmt, std::forward<Args>(args)...);
}
template<typename ...Args>
void debug(const utility::string_t& fmt, Args &&...args)
{
log(LogLevel::DEBUG, fmt, std::forward<Args>(args)...);
}
template<typename ...Args>
void info(const utility::string_t& fmt, Args &&...args)
{
log(LogLevel::INFO, fmt, std::forward<Args>(args)...);
}
template<typename ...Args>
void warn(const utility::string_t& fmt, Args &&...args)
{
log(LogLevel::WARN, fmt, std::forward<Args>(args)...);
}
template<typename ...Args>
void error(const utility::string_t& fmt, Args &&...args)
{
log(LogLevel::ERR, fmt, std::forward<Args>(args)...);
}
template<typename ...Args>
void critial(const utility::string_t& fmt, Args &&...args)
{
log(LogLevel::CRITICAL, fmt, std::forward<Args>(args)...);
}
template<typename... Args>
void log(const LogLevel level, const utility::string_t& fmt, Args &&...args)
{
InternalLog(level, fmt::format(fmt, std::forward<Args>(args)...));
}
protected:
std::shared_ptr<spdlog::logger> Spdlog = nullptr;
virtual void InternalLog(const LogLevel level, const utility::string_t& str) = 0;
private:
LogLevel Level = LogLevel::OFF;
};
} // namespace logging
} // namespace sdk
} // namespace axr