minor log - update

This commit is contained in:
2025-01-18 15:56:25 +01:00
parent cb3f10b7d5
commit a88ed06198
7 changed files with 145 additions and 115 deletions

View File

@@ -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;
};