Modélisation : classe de logs
Bonjour.
Je cherche à modéliser une classe qui permettra à mon programme de tracer tout ce qu'il fait.
Je voudrais pouvoir m'en servir comme ça (en gros) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| LogsManager a;
a->log("Je commençe le programme"); // certains des logs sont statiques
a->log("Zut, j'ai un objet d'id " + id + " qui est négatif"); // mais pas tous
// on peut (doit) donner un type à un log
a->log("Je commençe à parser", LogsManager::Parsing);
// on peut même en donner plusieurs
std::list<LogsManager::LogsTypes> types;
types.push_back(LogsManager::Parsing);
types.push_back(LogsManager::StrangeData);
a->log("J'ai parsé la valeur " + val + " qui est supérieure à 100", types); |
Dans cet exemple, je suppose quelque chose comme :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
class LogsManager
{
public :
...
public :
enum LogsTypes
{
Parsing = 0,
StrangeData,
...
}
....
} |
Ceci ne semble pas présenter de grandes difficultés.
Sauf que cela me chagrine que les types soient aussi dynamiques.
Cela va me donner derrière une fonction qui aura comme tête :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
void LogsManager::log(const std::string& log, const std::list<LogsManager::LogsTypes>* types)
{
if (types)
{
std::list<LogsManager::LogsTypes>::iterator it;
for(it = types.begin(); it != types.end(); it++)
{
switch (*it)
{
case Parsing :
...
break;
case StrangeData :
...
break;
...
}
}
....
}
} |
Et ça ce n'est pas très joli.
J'imagine qu'il existe une chouette solution pour faire cela statiquement, peut-être avec un genre de typelist, mais tout ce que je peux imaginer est terriblement compliqué.
Est-ce que quelqu'un saurait m'orienter vers une solution plus élégante ?
Merci par avance