You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
2.7 KiB
C++

#pragma once
#include <string>
#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 <typename... Args>
void Log(fmt::format_string<Args...> _fmt, Args&&... args)
{
try
{
std::vector<char> 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 <typename... Args>
void Trace(fmt::format_string<Args...> _fmt, Args&&... args)
{
try
{
std::vector<char> 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 <typename... Args>
void Info(fmt::format_string<Args...> _fmt, Args&&... args)
{
try
{
std::vector<char> 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 <typename... Args>
void Error(fmt::format_string<Args...> _fmt, Args&&... args)
{
try
{
std::vector<char> 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 };
//
};