CLASSE AVANCÉE DE LOG, THREAD SAFE ET DIVERSES SURCHARGES

cptpingu
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
- 15 août 2009 à 19:35
Kotomine
Messages postés
112
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
5 novembre 2009
- 2 sept. 2009 à 09:34
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50443-classe-avancee-de-log-thread-safe-et-diverses-surcharges

Kotomine
Messages postés
112
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
5 novembre 2009

2 sept. 2009 à 09:34
Question de profane de la bibliothèque Boost (j'y connais absolument rien):
A quoi sert ton lien d'héritage ? Pour des mutex de boost ?

D'autres questions esthétiques:
* je me souviens quand je codais mes serveurs, j'avais fait une implémentation d'un logger à l'arrache (c'était une encapsulation d'un bête printf(stderr)), mais j'avais un problème,dans mon fichier, les données était classée par thread (puis date) et non par date ; t'as ce même probleme ? (J'étais sous linux 2.6 /pthread).. une histoire de flush je pense

* Pour les includes de templates, j'utilisais la nomenclature ".inl" (pour inline)

En tout cas, excellente qualité de code.
Quel éditeur ?
shenron666
Messages postés
229
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
20 août 2014

18 août 2009 à 19:19
je pensai bien que ce n'était pas géré
par contre, ton code peut être plus simple :
Logger& operator<<(Logger& out, std::ostream& (*fn)(std::ostream&))
{
fn(out.outputStream());
return out;
}

enfin c'était juste pour te titiller un peu sur des cas particuliers ;)
cptpingu
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
125
18 août 2009 à 09:37
Non, ça ne le gère pas, mais si tu veux ajouter cette feature sans toucher à son code, ceci devrait le faire:

Logger&
operator<<(Logger& out,
std::ostream& (*fn)(std::ostream&))
{
std::ostringstream oss;
fn(oss);
out << oss.str();
return out;
}
shenron666
Messages postés
229
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
20 août 2014

18 août 2009 à 00:35
une question dans ce cas, est-ce que ceci fonctionne ?
log << std::endl;
sboli
Messages postés
10
Date d'inscription
vendredi 14 août 2009
Statut
Membre
Dernière intervention
31 mai 2010

16 août 2009 à 22:03
Avec l'op<< je retourne directement l'ostream donc c'est possible d'utiliser std::endl et tout les autres manipulateurs de flux, voire l'exemple du main.
Pour ce qui est de plantage du programme, c'est à l'utilisateur de la classe de se préoccuper de ça, vu que la classe s'utilise comme un flux standard, (donc std::endl, std::flush).
D'ailleurs je n'aurais pas à l'idée de rajouter des lignes de log sans std::endl (ou l'option useEndLine(true))sinon le fichier serait un vrai foutoir.
Sinon pour ta première remarque, si c'est à propos du "a_", je l'utilise pour identifier les variables qui ne feront rien d'autre qu'être "assignés" à des membres.
Afficher les 8 commentaires