Simulateur Ferroviaire
Reconstruction et visualisation d'un réseau ferroviaire à partir de données GeoJSON — Win32 / WebView2 / Leaflet
Chargement...
Recherche...
Aucune correspondance
Logger.h
Aller à la documentation de ce fichier.
1#pragma once
2
32#include <ctime>
33#include <filesystem>
34#include <fstream>
35#include <mutex>
36#include <sstream>
37#include <string>
38#include <windows.h>
39
40
41// =============================================================================
42// Niveau de trace
43// =============================================================================
44
48enum class LogLevel : int
49{
50 DEBUG = 0,
51 INFO = 1,
52 WARNING = 2,
53 ERR = 3,
54 FAILURE = 4,
55};
56
57
58// =============================================================================
59// Macros d'injection automatique du contexte (classe, fonction, ligne)
60// =============================================================================
61
67#define LOG_INFO(logger, message) \
68 (logger).writeLog(LogLevel::INFO, __FUNCTION__, __LINE__, (message))
69
70#define LOG_DEBUG(logger, message) \
71 (logger).writeLog(LogLevel::DEBUG, __FUNCTION__, __LINE__, (message))
72
73#define LOG_WARNING(logger, message) \
74 (logger).writeLog(LogLevel::WARNING, __FUNCTION__, __LINE__, (message))
75
76#define LOG_ERROR(logger, message) \
77 (logger).writeLog(LogLevel::ERR, __FUNCTION__, __LINE__, (message))
78
80#define LOG_FAILURE(logger, message) \
81 do { \
82 (logger).writeLog(LogLevel::FAILURE, __FUNCTION__, __LINE__, (message)); \
83 Logger::triggerFatalCrash((message)); \
84 } while (false)
85
86
87// =============================================================================
88// Classe Logger
89// =============================================================================
90
98class Logger
99{
100public:
101
102 // -------------------------------------------------------------------------
103 // Construction / destruction
104 // -------------------------------------------------------------------------
105
115 explicit Logger(const std::string& motorName);
116
118 ~Logger();
119
120 // Interdit la copie (un moteur = un fichier = une instance)
121 Logger(const Logger&) = delete;
122 Logger& operator=(const Logger&) = delete;
123
124 // -------------------------------------------------------------------------
125 // API publique
126 // -------------------------------------------------------------------------
127
139 void writeLog(LogLevel level,
140 const char* functionSignature,
141 int lineNumber,
142 const std::string& message);
143
151 void setMinimumLogLevel(LogLevel minimumLevel);
152
157 const std::string& getMotorName() const;
158
159 // -------------------------------------------------------------------------
160 // Gestion des erreurs fatales
161 // -------------------------------------------------------------------------
162
170 [[noreturn]] static void triggerFatalCrash(const std::string& errorMessage);
171
172private:
173
174 // -------------------------------------------------------------------------
175 // Membres privés
176 // -------------------------------------------------------------------------
177
178 std::string m_motorName;
179 std::ofstream m_outputFile;
180 std::mutex m_writeMutex;
182
183 // -------------------------------------------------------------------------
184 // Méthodes utilitaires statiques (privées)
185 // -------------------------------------------------------------------------
186
196 static std::string extractClassName(const std::string& functionSignature);
197
207 static std::string extractFunctionName(const std::string& functionSignature);
208
221 static std::string formatLogLine(LogLevel level,
222 const std::string& className,
223 const std::string& functionName,
224 int lineNumber,
225 const std::string& message);
226
232 static std::string levelToString(LogLevel level);
233
238 static std::string getCurrentTimestamp();
239
247 static void sendToDebugOutput(const std::string& text);
248};
LogLevel
Niveaux de sévérité des traces, du moins critique au plus critique.
Definition Logger.h:49
@ WARNING
Anomalie non-bloquante.
@ FAILURE
Erreur fatale — plante l'application après journalisation.
@ INFO
Événement nominal.
@ ERR
Erreur bloquante récupérable.
@ DEBUG
Trace de débogage interne.
Journaliseur associé à un moteur nommé.
Definition Logger.h:99
std::mutex m_writeMutex
Protection mutex pour les accès concurrents.
Definition Logger.h:180
std::ofstream m_outputFile
Flux d'écriture vers le fichier de log.
Definition Logger.h:179
LogLevel m_minimumLevel
Niveau minimum de filtrage.
Definition Logger.h:181
static std::string getCurrentTimestamp()
Retourne l'horodatage courant au format [HH:MM:SS].
Definition Logger.cpp:243
static std::string extractClassName(const std::string &functionSignature)
Extrait le nom de classe depuis la signature MSVC "__FUNCTION__".
Definition Logger.cpp:162
const std::string & getMotorName() const
Retourne le nom du moteur associé à cette instance.
Definition Logger.cpp:133
Logger & operator=(const Logger &)=delete
static std::string formatLogLine(LogLevel level, const std::string &className, const std::string &functionName, int lineNumber, const std::string &message)
Formate une ligne de trace complète.
Definition Logger.cpp:206
static void sendToDebugOutput(const std::string &text)
Envoie une chaîne vers la sortie de débogage Visual Studio.
Definition Logger.cpp:259
static std::string extractFunctionName(const std::string &functionSignature)
Extrait le nom de la fonction depuis la signature MSVC "__FUNCTION__".
Definition Logger.cpp:192
~Logger()
Definition Logger.cpp:83
static std::string levelToString(LogLevel level)
Convertit un LogLevel en chaîne courte pour l'affichage.
Definition Logger.cpp:229
void writeLog(LogLevel level, const char *functionSignature, int lineNumber, const std::string &message)
Écrit une ligne de trace dans le fichier et la sortie de débogage.
Definition Logger.cpp:96
Logger(const Logger &)=delete
void setMinimumLogLevel(LogLevel minimumLevel)
Définit le niveau minimum en dessous duquel les traces sont ignorées.
Definition Logger.cpp:127
static void triggerFatalCrash(const std::string &errorMessage)
Provoque l'arrêt immédiat de l'application après affichage d'une boîte de dialogue.
Definition Logger.cpp:143
std::string m_motorName
Nom du moteur (identifiant du fichier log).
Definition Logger.h:178