[conception] Logger singleton global
Bonjour,
je dois faire un logger pour une application qui comporte beaucoup de classes différentes. Et quasiment toutes ces classes ont besoin du logger.
Pour l'instant, l'en-tête de mon logger ressemble à ça (c'est un singleton):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Logger
{
public:
// destructor
~Logger();
// get instance
static Logger* GetInstance();
// log function
void Log(std::string text);
private:
// constructor
Logger();
// unique instance of Logger
static Logger* m_instance;
};
// initialization of the unique instance
Logger* Logger::m_instance; |
J'aurais avoir votre avis sur 2 points:
1/ J'aimerais utiliser mon logger en variable globale, de façon à ne pas avoir à faire passer une référence du logger à chacune des classes qui vont l'utiliser. Et j'aurais aimé instancier cette variable globale dans logger.h, de façon à ce que j'ai juste besoin d'inclure logger.h lorsque j'ai besoin du logger.
Mais je ne sais pas trop comment faire.
2/ J'ai besoin de passer des paramètres au constructeur (niveau de log par defaut, file descriptor du fichier log, ...). Le problème, c'est que le constructeur est appelé par GetInstance(), et que je ne peux raisonnablement pas passer des paramètres à GetInstance(). Comment faire donc?