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

Boost C++ Discussion :

Boost Log Formatter with channel and severity


Sujet :

Boost C++

  1. #1
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut Boost Log Formatter with channel and severity
    Bonjour,

    <JeVousRaconteMaVie : on>
    J'ai passé la première moitié de ma journée à installer boost log, de façon à pouvoir compiler sur ma machine windows avec le MinGW embarqué dans Code::Blocks.

    Je vous assure que ce n'est pas simple, si ça intéresse quelqu'un j'envoie un tutoriel contre 3 timbres

    Enfin, finalement j'ai réussi
    <JeVousRaconteMaVie : off>

    J'ai ensuite passé la seconde moitié de ma journée à essayer de comprendre comment ça marche et franchement, je trouve que la documentation est TRES mal écrite.

    Enfin, bref voilà, j'abandonne. Si quelqu'un peut m'aider ce serait sympa.
    Voici ce que je voudrais faire :
    1. Je veux mettre des logs dans mon programme sous forme de stream
    2. Ces logs sont sauvegardés dans un fichier
    3. Je veux choisir et loguer des 'channels', c'est à dire des catégories de log : réseau, thred, synchro, gameplay ...
    4. Je veux choisir et loguer la sévérité
    5. Mon programme étant multi-thread, je veux loguer le threadID
    6. Mon programme étant client/serveur, je veux loguer le processId


    Voici à quoi devrait ressembler mon fichier de log à la fin :
    En supposant que :
    • ccc est le pid d'un client
    • sss est le pid d'un server
    • 1111 2222 3333 sont les threadID de différents thread du client et du serveur.
    • il est 14h34, 23 secondes et quelques millièmes au moment où ces logs sont générés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ..
    [ccc][1111][14:34:23 112][Network][Info] Tentative de connexion au Seveur
    [sss][2222][14:34:23 237][Network][Info] Connexion entrante
    [sss][2222][14:34:23 248][Network][Info] Création dune session
    [sss][2222][14:34:23 324][Thread][Debug] Nouveau Thread
    [sss][3333][14:34:23 567][Network][Info] Session crée
    [ccc][1111][14:34:23 945][Network][Info] Connexion active
    [sss][3333][14:34:24 112][Network][Warning] Session interrompue
    [ccc][1111][14:34:24 112][Network][Error] Connexion interrompue
    ...
    Voilà ce qui marche :
    Déclaration
    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 Trace
        {
        public :
            enum SeverityLevels {...};    // mes niveaux de sécurité
            enum Channels{...};    // mes channels
            typedef boost::log::sources::severity_channel_logger_mt<
                SeverityLevels,     // the type of the severity level
                Channels            // the type of the channel name
            > MyLogger;    // le type de mes logger
        public :
            static MyLogger m_channel1;    // un loger par channel
            static MyLogger m_channel2;    // un loger par channel
            ...
        public :
            static void init();         // initialisation les logers/sinks...
        };
     
    }
    Implémentation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void Trace::init()
    {
        boost::log::add_common_attributes();   // j'ajoute les attributs de base (en l'occurence ProcessId, ThreadId et TimeStamp
        init_log_to_file
        (
            ...
            boost::log::keywords::format = "[%ProcessID%][%ThreadID%][%TimeStamp%][%Channel%][%Severity%]: %_%"
        );
    }
    Et après j'ai fait une macro pour pouvoir l'utiliser comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TRACE(Network,info) << "Logs enableds" << 4;
    Et voici ce que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [000000x2c0][0x246788][2010-Oct-02 23:10:57.156250][][]: Logs enableds
    ...
    [000000x2c0][0x2478f0][2010-Oct-02 23:11:04.265625][][]: Client started
    ...
    [00000x141c][0x247a98][2010-Oct-02 23:11:04.281250][][]: Nouvelle session
    Comme vous l'aurez deviné, mon problème est maintenant de faire apparaitre le channel et le niveau de sévérité

    J'ai tenté de modifier le code d'initialisation ci-dessus, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    boost::shared_ptr< boost::log::sinks::synchronous_sink< boost::log::sinks::basic_text_file_backend< char > > > pBackend;
    pBackend = boost::log::init_log_to_file(...); // je récupère le frontend du sink créé
    pBackend->locked_backend()->set_formatter(boost::log::formatters::stream << boost::log::formatters::attr< Channels >("Channel"));  // j'essaie d'ajouter un formater au backend associé.
    Et quelque part, je définis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::ostream& operator<< (std::ostream& strm, Trace::Channels const& val)
    {
    ...
    }
    .

    Le résultat que j'obtiens : ça compile, ça linke, ça s'exécute sans lancer d'exception, mais mon fichier de logs est irrémédiablement vide.

    Merci déjà à ceux qui ont lu ce long post.
    Merci d'autant plus à ceux qui pourront m'aider.

  2. #2
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Ajout : Bon le coup du ProcessId, ce n'est pas forcément pertinent, car il n'y a pas de raison que le Server et le client loguent dans le même fichier.

    De plus, je n'ai aucune espèce de certitude quand au fait que Boost Log sait faire cela.

    Mais cela ne change rien au problème

  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
    Ce que tu veux ressemble beaucoup a ce que j'ai fait : WinLog : une bibliothèque de génération de messages de trace
    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 chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Merci beaucoup pour ta réponse.

    Hélas, une des contraintes que j'ai est la portabilité de l'application.

    Par ailleurs, il est difficile de rivaliser avec la notoriété de boost : même si ta librairie est de meilleure qualité, plus robuste, plus performante, plus facile à installer, à utiliser, à maintenir... au final, il me semble qu'il est plus facile pour un codeur de valoriser sa maitrise de "boost", que celle de WinLog.

    Et sur ce point, je partage ton amertume : c'est pas juste, et les gens sont des cons de préférer de belles étiquettes plutôt que de beaux produits. Étant moi-même dans l'édition de logiciel, je comprendrais très bien ta frustration.

  5. #5
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Gaffe que boost.Log a été accepté depuis très peu de temps et n'ai pas intégré. D'ou al doc merdique et le support foireux.

    Je t'enjoint de poster sur la ML user de boost.

  6. #6
    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
    Citation Envoyé par Feriaman Voir le message
    Et sur ce point, je partage ton amertume : c'est pas juste, et les gens sont des cons de préférer de belles étiquettes plutôt que de beaux produits. Étant moi-même dans l'édition de logiciel, je comprendrais très bien ta frustration.
    Aucune amertume ni frustation. Je ne gagnerai pas un kopek de plus si tu l'utilises et pas un de moins si tu ne l'utilise pas.

    Citation Envoyé par Feriaman Voir le message
    Hélas, une des contraintes que j'ai est la portabilité de l'application.
    La bibliothèque WinLog est livrée avec ses sources, tu peux les intégrer directement dans ton projet et adieu les problèmes de portabilité. J'ose croire que je n'ai pas écris un code trop pourri.

    Citation Envoyé par Feriaman Voir le message
    Par ailleurs, il est difficile de rivaliser avec la notoriété de boost
    Tout à fait d'accord et ce n'est pas l'enjeu de cette bibliothèque.
    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
    .

  7. #7
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Citation Envoyé par Joel F Voir le message
    Gaffe que boost.Log a été accepté depuis très peu de temps
    Merci de l'info.

    Citation Envoyé par Joel F Voir le message
    Je t'enjoint de poster sur la ML user de boost.
    Vraiment, j'aimerais, mais j'ai un peu la flemme de décrire tout ceci en anglais
    Surtout qu'il faudrait ajouter les remarques sur l'installation avec windows/mingw pour faire bien.
    Déjà que j'ai paumé la moitié de mon week-end à installer ... j'aimerais que mon projet avance un peu.
    Allez promis, je vais essayer de me motiver d'ici la fin de la semaine.

    Citation Envoyé par ram-0000;
    Aucune amertume ni frustation. Je ne gagnerai pas un kopek de plus si tu l'utilises et pas un de moins si tu ne l'utilise pas.
    Et bien, je dois projeter alors. Parce que moi à ta place, ça m'agacerais franchement. Du coup : félicitations pour ton stoïcisme.

    En tout cas : merci pour vos réponses qui sont sympa, même si pour le moment (et tant que je me sors pas les doigts du xxx), je n'ai pas de solutions à mon problème.

  8. #8
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Citation Envoyé par Feriaman Voir le message
    Allez promis, je vais essayer de me motiver d'ici la fin de la semaine.
    Ca sera fait et si l'auteur passe et que ton mail est de la forme [Boost.Log] My problem is ...., ca passera.

  9. #9
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Boost.Log est en plein refactoring pour intégration dans une future version non? C'est un peu "dangereux" de se baser sur le code actuel non?

  10. #10
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Citation Envoyé par Klaim Voir le message
    Boost.Log est en plein refactoring pour intégration dans une future version non? C'est un peu "dangereux" de se baser sur le code actuel non?
    Je l'ignorais complètement. Merci de cette précision.
    Espérons que j'ai assez bien encapsulé mon truc pour ne pas avoir à trop re-coder de choses après restructuration.

  11. #11
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Citation Envoyé par Joel F Voir le message
    Ca sera fait et si l'auteur passe et que ton mail est de la forme [Boost.Log] My problem is ...., ca passera.
    Ayé, j'ai posté... j'attends la modération.
    Je vous tiens au courant.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/06/2009, 11h31
  2. [C#] Calendar Popup with TextBox and Image?
    Par Nadaa dans le forum ASP.NET
    Réponses: 15
    Dernier message: 04/02/2009, 11h59
  3. Indy TIdFTP : Please login with USER and PASS.
    Par sinfoni dans le forum Composants VCL
    Réponses: 3
    Dernier message: 19/03/2008, 08h15

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