[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:
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:
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:
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:
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