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
cl_cms_LogManager.cc
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 };
Comme attendu j'obtiens bien :
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"); }
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.
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
Voilà à quoi j'aimerais arriver :
Mais hélas je ne parviens pas à agencer mes catégories comme je l'entends...
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
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
Partager