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