minor log - update
This commit is contained in:
@@ -6,25 +6,27 @@
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
#include <filesystem>
|
||||
#include <deque>
|
||||
#include <unordered_set>
|
||||
|
||||
class Logger
|
||||
{
|
||||
public:
|
||||
|
||||
static Logger& Get()
|
||||
{
|
||||
static Logger instance;
|
||||
return instance;
|
||||
}
|
||||
{
|
||||
static Logger instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
Logger(Logger const&) = delete;
|
||||
void operator=(Logger const&) = delete;
|
||||
|
||||
enum class LogLevel
|
||||
{
|
||||
Info,
|
||||
Warning,
|
||||
Error,
|
||||
Info,
|
||||
Warning,
|
||||
Error,
|
||||
Shutdown,
|
||||
Initialize,
|
||||
Update,
|
||||
@@ -37,8 +39,12 @@ public:
|
||||
AI,
|
||||
Resource,
|
||||
Memory,
|
||||
Debug
|
||||
};
|
||||
Debug,
|
||||
Count // Do not use this, it's just to get the number of log levels it must at the end
|
||||
};
|
||||
|
||||
// Return the size of the enum class LogLevel as a constant integer
|
||||
static constexpr int LogLevelCount = static_cast<int>(LogLevel::Count);
|
||||
|
||||
struct LogEntry
|
||||
{
|
||||
@@ -46,7 +52,31 @@ public:
|
||||
LogLevel level;
|
||||
};
|
||||
|
||||
Logger()
|
||||
static const char* LogLevelToString(LogLevel level)
|
||||
{
|
||||
switch (level)
|
||||
{
|
||||
case LogLevel::Info: return "INFO";
|
||||
case LogLevel::Warning: return "WARNING";
|
||||
case LogLevel::Error: return "ERROR";
|
||||
case LogLevel::Shutdown: return "SHUTDOWN";
|
||||
case LogLevel::Initialize: return "INITIALIZE";
|
||||
case LogLevel::Update: return "UPDATE";
|
||||
case LogLevel::Render: return "RENDER";
|
||||
case LogLevel::Input: return "INPUT";
|
||||
case LogLevel::Physics: return "PHYSICS";
|
||||
case LogLevel::Audio: return "AUDIO";
|
||||
case LogLevel::Network: return "NETWORK";
|
||||
case LogLevel::Scripting: return "SCRIPTING";
|
||||
case LogLevel::AI: return "AI";
|
||||
case LogLevel::Resource: return "RESOURCE";
|
||||
case LogLevel::Memory: return "MEMORY";
|
||||
case LogLevel::Debug: return "DEBUG";
|
||||
default: return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
Logger()
|
||||
{
|
||||
char* appdata = nullptr;
|
||||
size_t len;
|
||||
@@ -54,8 +84,8 @@ public:
|
||||
if (appdata == nullptr)
|
||||
{
|
||||
m_appdataPath = "log.log";
|
||||
}
|
||||
else
|
||||
}
|
||||
else
|
||||
{
|
||||
m_appdataPath = appdata;
|
||||
}
|
||||
@@ -70,6 +100,11 @@ public:
|
||||
|
||||
void Log(const std::string& message, const std::string& fileName, int lineNumber, LogLevel level = LogLevel::Info)
|
||||
{
|
||||
if (m_disabledLogLevels.find(level) != m_disabledLogLevels.end())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
auto now = std::chrono::system_clock::now();
|
||||
auto in_time_t = std::chrono::system_clock::to_time_t(now);
|
||||
|
||||
@@ -79,59 +114,8 @@ public:
|
||||
// Obtenez les millisecondes <20> partir de maintenant
|
||||
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) % 1000;
|
||||
|
||||
std::string levelStr;
|
||||
switch (level)
|
||||
{
|
||||
case LogLevel::Error:
|
||||
levelStr = "ERROR";
|
||||
break;
|
||||
case LogLevel::Warning:
|
||||
levelStr = "WARNING";
|
||||
break;
|
||||
case LogLevel::Info:
|
||||
levelStr = "INFO";
|
||||
break;
|
||||
case LogLevel::Shutdown:
|
||||
levelStr = "SHUTDOWN";
|
||||
break;
|
||||
case LogLevel::Initialize:
|
||||
levelStr = "INITIALIZE";
|
||||
break;
|
||||
case LogLevel::Update:
|
||||
levelStr = "UPDATE";
|
||||
break;
|
||||
case LogLevel::Render:
|
||||
levelStr = "RENDER";
|
||||
break;
|
||||
case LogLevel::Input:
|
||||
levelStr = "INPUT";
|
||||
break;
|
||||
case LogLevel::Physics:
|
||||
levelStr = "PHYSICS";
|
||||
break;
|
||||
case LogLevel::Audio:
|
||||
levelStr = "AUDIO";
|
||||
break;
|
||||
case LogLevel::Network:
|
||||
levelStr = "NETWORK";
|
||||
break;
|
||||
case LogLevel::Scripting:
|
||||
levelStr = "SCRIPTING";
|
||||
break;
|
||||
case LogLevel::AI:
|
||||
levelStr = "AI";
|
||||
break;
|
||||
case LogLevel::Resource:
|
||||
levelStr = "RESOURCE";
|
||||
break;
|
||||
case LogLevel::Memory:
|
||||
levelStr = "MEMORY";
|
||||
break;
|
||||
case LogLevel::Debug:
|
||||
levelStr = "DEBUG";
|
||||
break;
|
||||
|
||||
}
|
||||
// Utilisez LogLevelToString pour obtenir la cha<68>ne de caract<63>res du niveau de log
|
||||
std::string levelStr = LogLevelToString(level);
|
||||
|
||||
std::stringstream ss;
|
||||
ss << "[" << std::put_time(&buf, "%Y-%m-%d") << "] "
|
||||
@@ -140,7 +124,7 @@ public:
|
||||
<< "[" << fileName << ":" << lineNumber << "] "
|
||||
<< message;
|
||||
|
||||
SendLogToUI(ss.str(), level);
|
||||
Log(ss.str(), level);
|
||||
|
||||
std::ofstream file(m_logFilePath, std::ios::app);
|
||||
if (file.is_open())
|
||||
@@ -150,15 +134,21 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void SendLogToUI(const std::string& message, LogLevel level)
|
||||
void Log(const std::string& message, LogLevel level)
|
||||
{
|
||||
m_logs.push_back({ message, level });
|
||||
if (m_disabledLogLevels.find(level) != m_disabledLogLevels.end())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (logBuffer.size() >= logBufferSize)
|
||||
{
|
||||
logBuffer.pop_front();
|
||||
}
|
||||
logBuffer.push_back({ message, level });
|
||||
}
|
||||
|
||||
const std::vector<LogEntry>& GetLogs() const
|
||||
{
|
||||
return m_logs;
|
||||
}
|
||||
const std::deque<LogEntry>& GetLogBuffer() const { return logBuffer; }
|
||||
|
||||
void ManageLogFiles(const std::string& directoryPath)
|
||||
{
|
||||
@@ -194,18 +184,22 @@ public:
|
||||
auto now = std::chrono::system_clock::now();
|
||||
auto in_time_t = std::chrono::system_clock::to_time_t(now);
|
||||
std::tm buf;
|
||||
localtime_s(&buf, &in_time_t);
|
||||
localtime_s(&buf, &in_time_t);
|
||||
|
||||
std::stringstream ss;
|
||||
ss << "Khaotic_log_" << std::put_time(&buf, "%Y_%m_%d_%Hh%Mm%Ss") << ".log";
|
||||
m_logFileName = ss.str();
|
||||
|
||||
}
|
||||
|
||||
std::unordered_set<LogLevel> m_disabledLogLevels;
|
||||
|
||||
private:
|
||||
std::string m_filename;
|
||||
std::string m_appdataPath;
|
||||
std::string m_logFileName;
|
||||
std::string m_logFilePath;
|
||||
std::vector<LogEntry> m_logs;
|
||||
|
||||
std::deque<LogEntry> logBuffer;
|
||||
const size_t logBufferSize = 1000;
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user