 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Loïc Joly Guest
|
Posted: Fri Jul 16, 2004 9:35 pm Post subject: Système de log |
|
|
Bonjour,
Voulant faire un système de log qui ressemble à std::cout, désactivable
au run-time et peu coûteux quand désactivé, un collègue et moi n'avons
rien vu d'autre qu'une macro. S'en suivent deux questions :
1/ Quelqu'un a-t-il une idée sans macro qui évite de demander à
l'utilisateur de faire des tests à la main à chaque sortie ?
2/ Je n'ai pas vraiment l'habitude de faire des macros. Pour l'instant,
je pense à faire un truc du genre :
#define LOG if (!log.isActive()) ; else log
Qui s'utiliserait ainsi :
LOG << "Hello world!" << endl;
Quelqu'un voit-il des limitations à cette approche ?
--
Loïc
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Fri Jul 16, 2004 9:42 pm Post subject: Re: Système de log |
|
|
On Fri, 16 Jul 2004 23:35:52 +0200, Loïc Joly
<loic.actarus.joly (AT) wanadoo (DOT) fr>:
| Quote: | Voulant faire un système de log qui ressemble à std::cout, désactivable
au run-time et peu coûteux quand désactivé
|
A première vue, et sans trop réfléchir aux tenants et aboutissants, je
vois ceci :
struct Log
{
bool isActive() const;
ostream& GetOstream();
//...
};
template <class T> Log& operator << (Log& l, T const& t)
{
if (l.isActive())
{
l.GetOstream() << t;
}
return l;
}
|
|
| Back to top |
|
 |
Loïc Joly Guest
|
Posted: Fri Jul 16, 2004 11:39 pm Post subject: Re: Système de log |
|
|
Fabien LE LEZ wrote:
| Quote: | On Fri, 16 Jul 2004 23:35:52 +0200, Loïc Joly
[email]loic.actarus.joly (AT) wanadoo (DOT) fr[/email]>:
Voulant faire un système de log qui ressemble à std::cout, désactivable
au run-time et peu coûteux quand désactivé
A première vue, et sans trop réfléchir aux tenants et aboutissants, je
vois ceci :
struct Log
{
bool isActive() const;
ostream& GetOstream();
//...
};
template <class T> Log& operator << (Log& l, T const& t)
{
if (l.isActive())
{
l.GetOstream() << t;
}
return l;
}
|
A priori, il y a un risque de perte de performances lors de l'évaluation
de t et des différents appels à l'opérateur<<, mais c'est effectivement
significativement mieux que si on mettait en forme t pour jeter le
résultat ensuite.
Et si le compilateur optimise bien, il pourrait n'évaluer t que lorsque
son résultat est désiré, voire inliner les appels à operator<< (Log &,
T) et ne faire qu'un seul test isActive, même si je doute que ce soit à
la portée des compilateurs actuels.
Je vais faire quelques benchs pour voir ce que ça donne en vrai.
--
Loïc
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Fri Jul 16, 2004 11:56 pm Post subject: Re: Système de log |
|
|
On Sat, 17 Jul 2004 01:39:13 +0200, Loïc Joly
<loic.actarus.joly (AT) wanadoo (DOT) fr>:
| Quote: | inliner les appels à operator<< (Log &,
T)
|
Suivant les compilos, il est possible que rajouter "inline" ait une
influence...
|
|
| Back to top |
|
 |
Patrick Mézard Guest
|
Posted: Sat Jul 17, 2004 7:41 am Post subject: Re: Système de log |
|
|
Loïc Joly wrote:
| Quote: | Bonjour,
Voulant faire un système de log qui ressemble à std::cout, désactivable
au run-time et peu coûteux quand désactivé, un collègue et moi n'avons
rien vu d'autre qu'une macro. S'en suivent deux questions :
1/ Quelqu'un a-t-il une idée sans macro qui évite de demander à
l'utilisateur de faire des tests à la main à chaque sortie ?
2/ Je n'ai pas vraiment l'habitude de faire des macros. Pour l'instant,
je pense à faire un truc du genre :
#define LOG if (!log.isActive()) ; else log
Qui s'utiliserait ainsi :
LOG << "Hello world!" << endl;
Quelqu'un voit-il des limitations à cette approche ?
|
Ca ne va pas répondre à ta question, mais peut-être que tu trouveras des
idées intéressantes ici :
http://log4cpp.sourceforge.net/
Je sais qu'il y a eu quelques discussions à ce sujet sur la ML de dev de
boost. Tu peux chercher des posts de John Torjo, il a posé une version
de sa bibliothèque dans le bac à sable de boost récemment il me semble.
Mais je ne sais absolument pas ce que ça vaut.
Patrick Mézard
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sat Jul 17, 2004 8:47 am Post subject: Re: Système de log |
|
|
On Sat, 17 Jul 2004 10:49:34 +0200, Loïc Joly
<loic.actarus.joly (AT) wanadoo (DOT) fr>:
| Quote: | Je vous déteste tous, à faire des bibliothèques réutilisables ou à
savoir qu'elles existent
|
Règle 1 : quoi qu'on cherche à faire, le code pour le faire existe
déjà.
Règle 2 : dans la majorité des cas, le code est tellement mal écrit
que refaire tout soi-même est plus facile et plus rapide que d'essayer
d'utiliser le code déjà fait.
|
|
| Back to top |
|
 |
Loïc Joly Guest
|
Posted: Sat Jul 17, 2004 8:49 am Post subject: Re: Système de log |
|
|
Patrick Mézard wrote:
J'ai regardé, et j'ai trouvé ça gros et pas du tout docummenté (j'aime
bien doxygen, mais les gens qui pensent qu'il suffit de passer doxygen
sur du code pour avoir de la doc, bin j'aime pas...).
| Quote: | Je sais qu'il y a eu quelques discussions à ce sujet sur la ML de dev de
boost. Tu peux chercher des posts de John Torjo, il a posé une version
de sa bibliothèque dans le bac à sable de boost récemment il me semble.
Mais je ne sais absolument pas ce que ça vaut.
|
Par contre, ça m'a l'air pas mal. Je vais y jeter un oeil plus poussé
quand je serai au boulot, mais cette bibliothèque a l'air de m'enlever
tout le fun que j'aurais eu à écrire ma fonction de log moi même.
Je vous déteste tous, à faire des bibliothèques réutilisables ou à
savoir qu'elles existent ;)
Pour info, ceux que ça intéresse, il utilise une macro semblable à ce
que j'avais proposé pour désactiver le log.
--
Loïc
|
|
| Back to top |
|
 |
Christophe de VIENNE Guest
|
Posted: Mon Jul 19, 2004 7:50 am Post subject: Re: Système de log |
|
|
Loïc Joly wrote:
| Quote: | Patrick Mézard wrote:
Ca ne va pas répondre à ta question, mais peut-être que tu trouveras
des idées intéressantes ici :
http://log4cpp.sourceforge.net/
J'ai regardé, et j'ai trouvé ça gros et pas du tout docummenté (j'aime
bien doxygen, mais les gens qui pensent qu'il suffit de passer doxygen
sur du code pour avoir de la doc, bin j'aime pas...).
|
Regarde log4cxx, c'est quasi la même chose (c'est le portage de log4j
pour c++), mais fait par d'autres personnes. La documentation y est très
correcte à mon gout.
http://logging.apache.org/log4cxx/
A+
Christophe
--
Christophe de Vienne
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|