Bonjour à tous,

voilà, je sais bien que c'est déjà fais, mais j'ai voulu faire un logger pour plusieurs raisons: pour apprendre certaines bases, parce que ce logger est destiné à une application qui, pour différentes raisons, doit utiliser un minimum de libs externes, etc.

Bref, je vous présentes ici mon header trés épuré (plus de pare-feu de compil, etc.), en espérant que vous aurez un peu de temps pour me dire ce que vous en pensez:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
enum LOG_LEVEL
{
	LOG_DEBUG,	
	LOG_WARNING,
	LOG_ERROR,
	LOG_CRITICAL
};
 
class Logger
{
public:
	Logger();
	~Logger();
	static int	init(const LOG_LEVEL level, const std::string logFilePath, const bool consoleOut);
	void		log(const std::string log, const LOG_LEVEL level = LOG_DEBUG);
	void		log(const std::string log, const bool consoleOut, const LOG_LEVEL level = LOG_DEBUG);
	static LOG_LEVEL		logLevel;
	static std::string	logFile;
	static bool		consoleOutput;
	static bool		isInitialized;
 
private:
	static bool	writeLine(std::string str);
	std::string	logLevel2String(LOG_LEVEL level);
};
 
void LOG(const std::string log, const LOG_LEVEL level = LOG_DEBUG);
void LOG(const std::string log, const bool consoleOut, const LOG_LEVEL level = LOG_DEBUG);
Le principe consiste à initialiser une fois de logger puis n'utiliser que la fonction LOG(...).

Et voici un exemple d'utilisation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Logger::init(logLevel, logFile, true);
LOG("test log"); //log simple
LOG("test log avec console output", true); //log avec outout sur la console