bonjour,
quelque un connait un bonne librairie pour faire des log ?
j ai bien vue log4cxx mais c ets limitter a linux.
Poco semble pas mal, a vez vous des avis, ou en connaisé vous d autres ??
merci.
bonjour,
quelque un connait un bonne librairie pour faire des log ?
j ai bien vue log4cxx mais c ets limitter a linux.
Poco semble pas mal, a vez vous des avis, ou en connaisé vous d autres ??
merci.
WinLog alors mais c'est Windows (comme son nom le laisse supposer)
Raymond
Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi
CafuroCafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbeUn logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
Salut,
Non c'est multi-plate-forme, cf. par ex les instructions pour compiler avec MSVC.
MAT.
Qu'attends tu d'une librairie qui gère les logs ?
Ca c est une excellente question.Qu'attends tu d'une librairie qui gère les logs ?
En fait je regarde dans un premier temps quelque chose de portable linux windows.
Et ensuite j evalue ce que cette librairie fait.
Actuellement on développent plusieurs projet, et je me suis rendu compte que l'on avait un besoin criant d'uniformisation concernant les log de sortie.
Actuellement le minimum qui devrai etre gere, serai que le log puissent reprendre plusieurs niveau, debug, test, release, nolog, ect...
que ces log soit gere par stream pour faciliter leur manipulation vers des fichier ou dans les gui ou vers une console.
Pour le reste je ne sais pas trop, mais je suis persuader que les lib integre plussieur fonction que je ne connait pas et qui serait pratique.
Alors regarde WinLog. Il y a les sources et des choses qui ressemblent à ce que tu demandes.
J'aimerais bien voir un portage sous Linux
Raymond
Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi
CafuroCafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbeUn logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
Bé dans ce cas moi j'ai fait un composite.
C'est à dire une classe de base, ILogger qui définie une méthode virtuelle pure "Log(const char* message)" avec les redifinitions concrètes des différentes variantes : Log(CString&), Log(std::string&) etc. ainsi que l'opérateur "<<" pour le gérer comme un flux, mais tous appellent finalement la version "const char*", déléguée aux classes concrètes qui ne feront que redéfinir une seule méthode la version basique, "const char*"
Pour chaque nouveau logger, tu as juste à hériter de ILogger et redéfinir la méthode "Log(const char* message)". Ainsi, CFileLogger ouvrira un fichier à la construction et écrira dedans dans sa méthode Log(const char*), CDebugLogger lui fera du OutputDebugLogger, CSoketLogger lui écrira dans un socket, CConsoleLogger ecrira dans la console...
Puis un CLogManager qui sera finalement un "ILogger", mais dont le rôle est d'encapsuler différent ILogger et de leur transmettre le message à chacun, j'en ai donc fait un singleton.
Puis tes classes concrètes
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 class ILogger { public: void Log(CString& sMessage) { *this << sMessage.GetBuffer(); } void Log(std::string& sMessage) { *this << sMessage.c_str(); } template <class T> ILogger& ILogger::operator <<(const T& rtToLog) { std::ostringstream Stream; Stream << rtToLog; Log(Stream.str()); return *this; } protected: virtual void Log(const char* sMessage) = 0; };
Pareil avec tout type de logger (vers le debug, vers un socket, vers une fenêtre etc...)
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 class CFileLogger : public ILogger { public: CFileLogger(const char* sFile) { // Initialisation du fichier, m_File.open etc... } ~CFileLogger() { m_File.close(); } protected: virtual void Log(const char* sMessage) { m_File << sMessage; } private: std::ofstream m_File }
Et le gestionnaire :
Je te passe l'utilité d'un singleton. Puis tu fais un typedef pour plus d'aisance :
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 class CLogManager : public CSingleton<CLogManager>, public ILogger { public : // Destructeur qui détruit les loggers void AddLogger(ILogger* logger); void RemoveLogger(ILogger* logger); protected: virtual void Log(const char* sMessage) { std::vector<ILogger*>::iterator it = m_vecLoggers.begin(); while(it != m_vecLoggers.end()) { *it << sMessage; // pour transmettres aux loggers enregistrés } } private: std::vector<ILogger*> m_vecLoggers; };
Pour ensuite te retrouver avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 typedef CLogManager::Instance() Log
à l'initialisation, puis
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Log.AddLogger(new CFileLogger("output.log")); Log.AddLogger(new CDebugLogger()); Log.AddLogger(new CSocketLogger("192.168.1.2", "3131"));
à l'utilisation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int i = 2; float f = 5.0f; Log << "Message" << i << " de " << f << std::endl;
Je trouve qu'une bonne lib de log doit aussi gérer le temps, avec des compteurs, estimation de temps restant de tâche, etc.
Ouais moi j'ai rajouté des fonction d'obtention de temps dans le manager, qui va construire une chaîne de caractère représentant la date et l'heure, puis la transmettre à chaque "logger" enregistré.
Après des compteurs, du temps etc... ça doit être dossicié des logs. Admettons un chargement avec une barre de progression, devoir utiliser la lib des logs pour obtenir l'avancement et l'estimation du temps restant ressemblerai à un problème de conception.
Non, c'est une question de définition. On a souvent besoin de gérer le log et le temps ensemble. Ce n'est pas pour ça qu'il faut les conceptualiser dans une même classe, mais dans une même lib ça ne me dérangerait pas.
Enocre un besoin pour un librairie de log:
http://www.developpez.net/forums/d69...on-loperateur/
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Partager