IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[c# 2.0]Diagnostics.Trace, tracer dans plusieurs fichier


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 100
    Par défaut [c# 2.0]Diagnostics.Trace, tracer dans plusieurs fichier
    Salut,

    J'ai une appli ou j'ai 5 classes metiers .
    Chaque classes à çà propre trace dans un fichier.
    Tous ceci étant du code maison.
    Je voulais refaire çà en utilisant les obj fourni par le fw: Diagnostics.Trace..

    Dans on appli j'ai une instance de chaque classe metier.
    Dans chaque classe j'ai:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class classMetierX
    {
    public classMetierX()
    {
     System.Diagnostics.Trace.AutoFlush = true;
     System.Diagnostics.Trace.Listeners.Add(new System.Diagnostics.TextWriterTraceListener(@"C:\classMetierX.Log", "classMetierX"));
    }
     
    void Tracer(string msg) { System.Diagnostics.Trace.Writeline(msg);}
    }

    Resultat j'ai 5 fichiers logs:

    classMetier1.Log
    classMetier2.Log
    classMetier3.Log
    classMetier4.Log
    classMetier5.Log

    qui contienne exactement la même chose, hors je voudrait que chaque fichier classMetierX.Log contienne uniquement les message de la classe classMetierX??

    Est-ce possible et si oui comment? J'ai bien regardé la SourceFilter mais je comprend pas du tout comment elle fonctionne et si çà peut m'aider.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 100
    Par défaut
    Nobody?

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Par défaut
    J'ai utilisé la fonction Rechercher et hop j'ai trouvé ce superbe sujet qui correspond à ma requête mais qui n'y répond pas !

    Mon problème est le suivant :

    J'utilise l'outil trace pour avoir un suivi des actions de l'utilisateur.
    J'aimerai avoir 2 niveaux de fichiers, un très détaillé et un qui l'est un peu moins.
    Je souhaite donc pouvoir définir 2 fichiers de log, pour l'instant j'arrive à écrire dans deux fichiers, mais c'est toujours la même chose qui est écrite !
    Quelqu'un aurait-il une idée?

  4. #4
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Merci, maintenant je me rappelle pourquoi j'ai abandonné le système de Trace du framework y'a déjà plusieurs années.

    Du coup j'ai fait ma propre classe de logging, donc le coeur est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // on créé le nom du fichier (ici ce sera un fichier par exécutable)
    string filename = @"c:\temp\logs\" + System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".log";
    // on ouvre le fichier en mode "Append"  pour écrire à la fin
    using(StreamWriter file = new StreamWriter(filename, true))
    {
    	// et on écrit dedans
    	file.WriteLine(log);
    }
    Après y'a moyen d'y rajouter une couche pour le rendre thread-safe, d'y coller la date et l'heure courante ainsi que le nom de la méthode appelante (via Reflection)

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    Et pourquoi ne pas faire un truc "simple" comme cela : ?

    Une form avec 4 boutons dans mon exemple, et le code suivant :
    (chaque click sur les boutons est piloté par le button1_click)

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    public Form1()
            {
                InitializeComponent();            
                Trace.Listeners.Add(new MonTracer(@"c:\nico1.log","detail"));
                Trace.Listeners.Add(new MonTracer(@"c:\nico2.log","general"));            
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                if (sender == button1)
                {
                    Trace.WriteLine("button1", "detail");
                }
                else if (sender == button2)
                {
                    Trace.WriteLine("button2", "detail");
                    Trace.WriteLine("button2", "general");
                }
                else if (sender == button3)
                {
                    Trace.WriteLine("button3", "detail");
                }
                else if (sender == button4)
                {
                    Trace.WriteLine("button4", "detail");
                    Trace.WriteLine("button4", "general");
                }
            }
        }
     
        public class MonTracer : TextWriterTraceListener
        {
            private String myCategory;
            public MonTracer(String name, String cat)
                : base(name)
            {
                myCategory = cat;
            }
     
            public override void WriteLine(string message, string category)
            {
                if (category == myCategory)
                {
                    base.WriteLine(message, category);
                    Flush();
                }
            }
        }
    Ca "oblige" à rajouter la categorie de trace, mais bon, ca permet de filtrer.
    Voir en regarder aussi du cote des TraceFilter ce qui serait "plus" optimal...

    (et la , dans mon code, je pourrais passer un truc du genre List<String> à filter plutot qu'une seule String

    The Monz, Toulouse

  6. #6
    Membre averti
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Par défaut
    Merci Mose pour ton idée,

    Merci The Monz pour ta solution elle marche parfaitement je n'y aurai jamais pensé! Encore merci!!!

Discussions similaires

  1. [Débutant] tracer des courbes avec des données dans plusieurs fichiers
    Par adila34 dans le forum MATLAB
    Réponses: 4
    Dernier message: 12/06/2015, 21h51
  2. Réponses: 8
    Dernier message: 19/09/2006, 16h42
  3. Somme des éléments dans plusieurs fichiers.
    Par AjJi dans le forum Linux
    Réponses: 2
    Dernier message: 11/06/2006, 01h51
  4. ecrire dans plusieur fichier
    Par Rocket2005 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 11/01/2006, 22h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo