Bonjour à tous.

Ma question est peut-être assez classique, mais la plupart des réponses me semblent pour le moins "lourdes". En effet, j'ai besoin de tracer les évènements dans un client lourd qui a de "nombreux" threads asynchrones. Or, l'écriture dans un fichier de log unique est problématique, car, de temps en temps, on rencontre des "locks" du même fichier entre threads. De fait, j'ai juste fait ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
GestionFichier() { }
 
        //Creation et ecriture du fichier de log
        public void logger(string ligne)
        {
            try
            {
                StringBuilder line = new StringBuilder();
                StreamWriter oStreamWriter;
                while ((oStreamWriter = TryExclusiveOpen(fichierLog)) == null) ;
                line.AppendFormat(@"{0}:{1}", DateTime.Now.ToString(), ligne);
                oStreamWriter.WriteLine(line.ToString());
                oStreamWriter.Close();
            }
            //Gestion de toutes les exceptions
            catch (Exception ex)
            {
                GestionFichier.getInstance().erreur("GestionFichier > logger > Exception > " + ex.Message);
                GestionFichier.getInstance().logger("GestionFichier > logger > Exception > " + ex.Message);
                msg = ex.Message;
                //msg = GestionFichier.getInstance().getMessage("2");
                MessageBox.Show(msg, Constantes.msg_erreur, System.Windows.Forms.MessageBoxButtons.OK);
                System.Environment.Exit(0);
                //fenetreException = new FenetreException(msg, ex);
                //fenetreException.Show();
            }
        }
        private StreamWriter TryExclusiveOpen(String filename)
        {
            try
            {
                StreamWriter oStreamWriter = new StreamWriter(filename, true);
                return oStreamWriter;
            }
            catch
            {
                return null;
            }
        }
Ok, c'est assez crade (pour tester uniquement), mais je cherche à optimiser le tout.
1) Parce que je ne fais pas confiance à une boucle infinie pour faire patienter le thread à l"écriture
2) Parce que je ne suis pas sûr que cela ne peut pas provoquer de bug débile.

Donc:
1° j'ai vu de la gestion de log en threadé sur le net. Est-ce malin/efficace? Me concernant, je suis un peu perplexe de laisser un thread tourner que pour faire quelques écritures de logs.
2° Y a-t-il un moyen plus propre de gérer le lock de fichier, même temporairement?

Toute proposition est bienvenue