C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Système de log

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Loïc Joly
Guest





PostPosted: Fri Jul 16, 2004 9:35 pm    Post subject: Système de log Reply with 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 ?

--
Loïc
Back to top
Fabien LE LEZ
Guest





PostPosted: Fri Jul 16, 2004 9:42 pm    Post subject: Re: Système de log Reply with quote



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





PostPosted: Fri Jul 16, 2004 11:39 pm    Post subject: Re: Système de log Reply with quote



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





PostPosted: Fri Jul 16, 2004 11:56 pm    Post subject: Re: Système de log Reply with quote

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





PostPosted: Sat Jul 17, 2004 7:41 am    Post subject: Re: Système de log Reply with quote

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





PostPosted: Sat Jul 17, 2004 8:47 am    Post subject: Re: Système de log Reply with quote

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 Wink

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





PostPosted: Sat Jul 17, 2004 8:49 am    Post subject: Re: Système de log Reply with quote

Patrick Mézard wrote:

Quote:
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...).

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





PostPosted: Mon Jul 19, 2004 7:50 am    Post subject: Re: Système de log Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.