#pragma once #include #include "fmt/format.h" #include "fmt/args.h" #include "DllDefines.h" class UTILITYDLL CLogger { public: CLogger(const std::string& strName); virtual ~CLogger(); void Start(); void Stop(); void SetEnable(bool bEnable) { m_bEnable = bEnable; } void Log(const std::string& strMsg); void Trace(const std::string& strMsg); void Info(const std::string& strMsg); void Error(const std::string& strMsg); template void Log(fmt::format_string _fmt, Args&&... args) { try { std::vector buf; fmt::vformat_to(std::back_inserter(buf), _fmt, fmt::make_format_args(args...)); std::string log_msg(std::string_view(buf.data(), buf.size())); Log(log_msg); } catch (...) { } } template void Trace(fmt::format_string _fmt, Args&&... args) { try { std::vector buf; fmt::vformat_to(std::back_inserter(buf), _fmt, fmt::make_format_args(args...)); std::string log_msg(std::string_view(buf.data(), buf.size())); Trace(log_msg); } catch (...) { } } template void Info(fmt::format_string _fmt, Args&&... args) { try { std::vector buf; fmt::vformat_to(std::back_inserter(buf), _fmt, fmt::make_format_args(args...)); std::string log_msg(std::string_view(buf.data(), buf.size())); Info(log_msg); } catch (...) { } } template void Error(fmt::format_string _fmt, Args&&... args) { try { std::vector buf; fmt::vformat_to(std::back_inserter(buf), _fmt, fmt::make_format_args(args...)); std::string log_msg(std::string_view(buf.data(), buf.size())); Error(log_msg); } catch (...) { } } protected: bool IsEnable() const { return m_bEnable; } std::string GetName() { return m_strName; } private: virtual void DoStart() = 0; virtual void DoFlush() = 0; virtual void DoLogging(const std::string& strMsg) = 0; virtual void DoInfo(const std::string& strMsg){}; virtual void DoTrace(const std::string& strMsg){}; virtual void DoError(const std::string& strMsg){}; std::string m_strName; bool m_bEnable{ false }; bool m_bRotating{ true }; int m_nFileSizeMB{ 1 }; // };