IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

une bonne librairie pour faire des log ?


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 109
    Par défaut une bonne librairie pour faire des log ?
    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.

  2. #2
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Boost va avoir la sienne d'ici peu.

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    WinLog alors mais c'est Windows (comme son nom le laisse supposer)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Citation Envoyé par lezurp Voir le message
    j ai bien vue log4cxx mais c ets limitter a linux
    Non c'est multi-plate-forme, cf. par ex les instructions pour compiler avec MSVC.

    MAT.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Qu'attends tu d'une librairie qui gère les logs ?

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 109
    Par défaut
    Qu'attends tu d'une librairie qui gère les logs ?
    Ca c est une excellente question.
    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.

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    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

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    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.

    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;
    };
    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
    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
    }
    Pareil avec tout type de logger (vers le debug, vers un socket, vers une fenêtre etc...)
    Et le gestionnaire :

    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;
    };
    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
     
    typedef CLogManager::Instance() Log
    Pour ensuite te retrouver avec
    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'initialisation, puis

    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;
    à l'utilisation

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    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.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    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.

  11. #11
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    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.

  12. #12
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Enocre un besoin pour un librairie de log:
    http://www.developpez.net/forums/d69...on-loperateur/

  13. #13
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Sujet abordé récemment ou presque

Discussions similaires

  1. librairie, pour faire des graphes
    Par dionisos56 dans le forum C#
    Réponses: 6
    Dernier message: 12/03/2009, 19h57
  2. librairie pour faire des requete DNS
    Par Z-fly dans le forum Réseau
    Réponses: 2
    Dernier message: 14/08/2008, 03h23
  3. La bonne méthode pour faire des timers
    Par Tigrounette dans le forum Général Java
    Réponses: 10
    Dernier message: 19/07/2008, 22h35
  4. librairie pour faire des graphes
    Par elekis dans le forum 2D
    Réponses: 6
    Dernier message: 26/11/2007, 18h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo