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

Bibliothèques Discussion :

[log4cpp] Une seule catégorie


Sujet :

Bibliothèques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Par défaut [log4cpp] Une seule catégorie
    Bonjour à tous,

    Je commence à utiliser la bibliothèque log4cpp, et j'ai besoin de quelques infos sur son utilisation... Je sais qu'elle n'est pas très utilisée mais je teste à tout hasard.
    j'ai compris "grosso modo" le principe des Category mais je ne parviens pas à comprendre pourquoi celle-ci ont besoin d'une hiérarchie ?

    J'aimerais centraliser toutes les générations de log vers un seul objet :

    cl_cms_LogManager.hh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include ce qu'il faut...
    class cl_cms_LogManager:public log4cpp::Category{ 
    public: 
    cl_cms_LogManager(); // Constructeur 
    };
    cl_cms_LogManager.cc
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    cl_cms_LogManager::cl_cms_LogManager():log4cpp::Category::Category("", NULL, log4cpp::Priority::DEBUG){ 
     
    log4cpp::Category &cl_CoutCat = this->getInstance("STDOUT"); 
    log4cpp::Category &cl_CerrCat = cl_CoutCat.getInstance("STDERR"); 
     
    log4cpp::Appender* appcout = new log4cpp::OstreamAppender("OstreamAppender",&std::cout); 
    log4cpp::Appender* appcerr = new log4cpp::OstreamAppender("OstreamAppender",&std::cerr); 
     
    appcout->setLayout(new log4cpp::BasicLayout()); 
    appcerr->setLayout(new log4cpp::BasicLayout()); 
     
    cl_CoutCat.setAppender(appcout); 
    cl_CerrCat.setAppender(appcerr); 
     
    cl_CoutCat.setPriority(log4cpp::Priority::INFO); 
    cl_CerrCat.setPriority(log4cpp::Priority::ERROR); 
     
    // Maintenant une batterie de test
     
        this->debug("test debug root");
        cl_CoutCat.debug("test debug cout");
        cl_CerrCat.debug("test debug cerr");
     
        this->info("test info root");
        cl_CoutCat.info("test info cout");
        cl_CerrCat.info("test info cerr");
     
        this->error("test error root");
        cl_CoutCat.error("test error cout");
        cl_CerrCat.error("test error cerr");
    }
    Comme attendu j'obtiens bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    1171016988 DEBUG ./bin/faxoutplus : test debug root
    1171016988 INFO ./bin/faxoutplus : test info root
    1171016988 INFO STDOUT : test info cout
    1171016988 ERROR ./bin/faxoutplus : test error root
    1171016988 ERROR STDOUT : test error cout
    1171016988 ERROR STDERR : test error cerr
    Cependant je trouve cela très désagréable de devoir appeler systématiquement une catégorie différente pour obtenir une log dans la sortie désirée.

    Voilà à quoi j'aimerais arriver :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          |                      |
    DEBUG < INFO < NOTICE < WARN < ERROR < CRIT < ALERT < FATAL
    ______|______________________|____________________________
    STDOUT|  STDOUT+ FILE.STD    | STDERR + FILE.STD + FILE.LOG
    Mais hélas je ne parviens pas à agencer mes catégories comme je l'entends...
    Si quelqu'un a des idées ou bien connait un peu le problème...
    Un exemple de code soure utilisant log4cpp me serait même suffisant
    merci

  2. #2
    Membre confirmé Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Par défaut
    Bon pour répondre a ma propre question et parce que d'autres peuvent un jour se poser la même :

    1. Il n'est pas nécessaire de réimplémenter la classe log4cpp::Category.
    Celle-ci suffit très bien à elle même

    2. Le programme principal se charge de configurer l "instance" racine, accessible par getRoot().

    3. Les autres classes (de plus haut niveau) se contentent d'instancier des sous catégories.
    La structure hiérarchique se gère par une succession de noms séparés par des points.

    Server
    Server.Fax
    Server.Fax.FaxOut ...

    4. Et enfin, pour limiter la sorties de log au dessus d'un certain niveau il est nécessaire de redéfinir la classe FIlter et de surcharger la fonction _decide.


    Voilà en bref, pour plus d'info -> MP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Newsletter] Focaliser la Newsletter sur une seule catégorie du site
    Par Papinou dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 27/04/2012, 12h55
  2. Wordpress une seul catégorie CHILD
    Par zecka dans le forum WordPress
    Réponses: 1
    Dernier message: 24/10/2011, 16h54
  3. TDBGRID - Couleur de fond d'une seule cellule
    Par cgo dans le forum Bases de données
    Réponses: 5
    Dernier message: 11/09/2009, 10h16
  4. Arrangement des catégories dans une seule liste
    Par djuls dans le forum Langage
    Réponses: 2
    Dernier message: 02/09/2009, 15h32
  5. Regrouper 3 requêtes dans une seule
    Par LadyArwen dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/06/2003, 09h32

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