Je veux mettre en œuvre une classe simple pour la journalisation de plusieurs threads. L'idée qu'il y ait, que chaque objet qui veut enregistrer des trucs, reçoit un objet OSTREAM qu'il peut écrire des messages à l'utilisation des opérateurs habituels. Le comportement souhaité est que les messages sont ajoutés au journal lorsque le flux est rincé. De cette façon, les messages ne seront pas interrompus par des messages d'autres threads. Je souhaite éviter d'utiliser une chaîne temporaire pour stocker le message, car cela ferait la plupart des messages au moins des deux twoliners. Comme je le vois, la manière standard de réaliser cela serait de mettre en œuvre mon propre streambuffer, mais cela semble très encombrant et surmontée. Y a-t-il un moyen plus simple de faire cela? Sinon, connaissez-vous un bon article / HOWTO / Guide sur les streambufs personnalisés? P>
Merci d'avance, P>
espace_c0wbo0y p>
Comme il semble fonctionner, j'ai ajouté ma propre réponse. P>
4 Réponses :
Jetez un coup d'oeil à log4cpp ; Ils ont un support multi-thread. Cela peut sauver votre temps. P>
Merci pour votre réponse. Cependant, en raison de la restriction de mon environnement de travail, je ne peux pas introduire une nouvelle bibliothèque. En outre, la plupart des bibliothèques de journalisation existantes sont beaucoup trop lourdes pour mes besoins.
Si vous recherchez une licence plus libérale, voir Log4CXX par Apache. Logging.apache.org/log4cxx/index.html
Alors, j'ai regardé Boost.iostreams et Voici ce que j'ai proposé:
TestSink sink; boost::iostreams::stream_buffer< TestSink > testbuf( sink, 50000 ); std::ostream out( &testbuf ); for ( int i = 0; i < 10000; i++ ) out << "test" << i; out << std::endl;
re. votre propre réponse. Si vous utilisez ceci pour la journalisation des erreurs et que vous programmez des accidents avant de rincer votre flux, vous êtes un peu inutile, n'est-ce pas? P>
Je suppose que ce serait un problème avec une approche forestière.
Sauf pour les systèmes de journalisation comme ETW qui ont une aide extérieure.
Vous pensez que Log4CPP est trop lourd et vous atteignez votre boost.iostreams à la place? Hein? P>
Vous voudrez peut-être envisager logog . C'est le fil-coffre-fort pour Posix, Win32 et Win64. P>
Si Boost est déjà dans son ensemble de bibliothèques, ce n'est pas si lourd. Sinon, totalement d'accord avec vous.
On dirait une bonne solution! Peut-être l'ajouter comme votre propre réponse?