Bonjour,
<JeVousRaconteMaVie : on>
J'ai pass� la premi�re moiti� de ma journ�e � installer boost log, de fa�on � pouvoir compiler sur ma machine windows avec le MinGW embarqu� dans Code::Blocks.
Je vous assure que ce n'est pas simple, si �a int�resse quelqu'un j'envoie un tutoriel contre 3 timbres 
Enfin, finalement j'ai r�ussi
<JeVousRaconteMaVie : off>
J'ai ensuite pass� la seconde moiti� de ma journ�e � essayer de comprendre comment �a marche et franchement, je trouve que la documentation est TRES mal �crite.
Enfin, bref voil�, j'abandonne. Si quelqu'un peut m'aider ce serait sympa.
Voici ce que je voudrais faire :
- Je veux mettre des logs dans mon programme sous forme de stream
- Ces logs sont sauvegard�s dans un fichier
- Je veux choisir et loguer des 'channels', c'est � dire des cat�gories de log : r�seau, thred, synchro, gameplay ...
- Je veux choisir et loguer la s�v�rit�
- Mon programme �tant multi-thread, je veux loguer le threadID
- Mon programme �tant client/serveur, je veux loguer le processId
Voici � quoi devrait ressembler mon fichier de log � la fin :
En supposant que :
- ccc est le pid d'un client
- sss est le pid d'un server
- 1111 2222 3333 sont les threadID de diff�rents thread du client et du serveur.
- il est 14h34, 23 secondes et quelques milli�mes au moment o� ces logs sont g�n�r�s.
1 2 3 4 5 6 7 8 9 10 11
|
..
[ccc][1111][14:34:23 112][Network][Info] Tentative de connexion au Seveur
[sss][2222][14:34:23 237][Network][Info] Connexion entrante
[sss][2222][14:34:23 248][Network][Info] Création dune session
[sss][2222][14:34:23 324][Thread][Debug] Nouveau Thread
[sss][3333][14:34:23 567][Network][Info] Session crée
[ccc][1111][14:34:23 945][Network][Info] Connexion active
[sss][3333][14:34:24 112][Network][Warning] Session interrompue
[ccc][1111][14:34:24 112][Network][Error] Connexion interrompue
... |
Voil� ce qui marche :
D�claration
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Trace
{
public :
enum SeverityLevels {...}; // mes niveaux de sécurité
enum Channels{...}; // mes channels
typedef boost::log::sources::severity_channel_logger_mt<
SeverityLevels, // the type of the severity level
Channels // the type of the channel name
> MyLogger; // le type de mes logger
public :
static MyLogger m_channel1; // un loger par channel
static MyLogger m_channel2; // un loger par channel
...
public :
static void init(); // initialisation les logers/sinks...
};
} |
Impl�mentation :
1 2 3 4 5 6 7 8 9
| void Trace::init()
{
boost::log::add_common_attributes(); // j'ajoute les attributs de base (en l'occurence ProcessId, ThreadId et TimeStamp
init_log_to_file
(
...
boost::log::keywords::format = "[%ProcessID%][%ThreadID%][%TimeStamp%][%Channel%][%Severity%]: %_%"
);
} |
Et apr�s j'ai fait une macro pour pouvoir l'utiliser comme �a :
TRACE(Network,info) << "Logs enableds" << 4;
Et voici ce que j'obtiens :
1 2 3 4 5
| [000000x2c0][0x246788][2010-Oct-02 23:10:57.156250][][]: Logs enableds
...
[000000x2c0][0x2478f0][2010-Oct-02 23:11:04.265625][][]: Client started
...
[00000x141c][0x247a98][2010-Oct-02 23:11:04.281250][][]: Nouvelle session |
Comme vous l'aurez devin�, mon probl�me est maintenant de faire apparaitre le channel et le niveau de s�v�rit�
J'ai tent� de modifier le code d'initialisation ci-dessus, comme ceci :
1 2 3
| boost::shared_ptr< boost::log::sinks::synchronous_sink< boost::log::sinks::basic_text_file_backend< char > > > pBackend;
pBackend = boost::log::init_log_to_file(...); // je récupère le frontend du sink créé
pBackend->locked_backend()->set_formatter(boost::log::formatters::stream << boost::log::formatters::attr< Channels >("Channel")); // j'essaie d'ajouter un formater au backend associé. |
Et quelque part, je d�finis :
1 2 3 4
| std::ostream& operator<< (std::ostream& strm, Trace::Channels const& val)
{
...
} |
.
Le r�sultat que j'obtiens : �a compile, �a linke, �a s'ex�cute sans lancer d'exception, mais mon fichier de logs est irr�m�diablement vide.
Merci d�j� � ceux qui ont lu ce long post.
Merci d'autant plus � ceux qui pourront m'aider.
Partager