- C / C++ / C++.NET : Classe avancée de log, thread safe et diverses surcharges - CodeS Source
- C / C++ / C++.NET : Clogfile - classe de gestion de fichier log (thread safe) - CodeS SourceS
- C# / .NET : Thread-Safe simplement avec SynchronizationContext - CodeS SourceS
- Obtenir la classe qui lance un thread, à partir du thread
- Thread Safe
2 sept. 2009 à 09:34
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 ?
18 août 2009 à 19:19
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 ;)
18 août 2009 à 09:37
Logger&
operator<<(Logger& out,
std::ostream& (*fn)(std::ostream&))
{
std::ostringstream oss;
fn(oss);
out << oss.str();
return out;
}
18 août 2009 à 00:35
log << std::endl;
16 août 2009 à 22:03
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.