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

ASP.NET Discussion :

Comment faire une bonne trace


Sujet :

ASP.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Comment faire une bonne trace
    Bonjour Messieurs Dames,

    Voilà je suis entrain de faire quelques tests de Trace.
    J'aurai besoin d'aide pour utiliser une solution efficace.

    Les contraintes:
    - Pas de composant externe,
    - Framework 2.0
    - Écrire dans un fichier texte.

    Au début j'utilisais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private void TestTrace()
            {
                Trace.Write("Log", "TestTrace() " + DateTime.Now.ToString());
                try
                {
                    int unChiffre = 0;
                    int resultat = (10 / unChiffre);
                }
                catch (Exception ex)
                {
                    Trace.Warn("Exception", "TestTrace()" + DateTime.Now.ToString(), ex);
                }
                Trace.Write("Log", "TestTrace() " + DateTime.Now.ToString());
            }
    Mais ça n'écrit que dans le journal de VS

    J'ai essayé ensuite de suivre cette explication pour pouvoir écrire dans un fichier text:
    http://msdn.microsoft.com/fr-fr/libr...elistener.aspx

    Mais sans succès.

    Quelle serait la meilleurs façon de faire?


    Je vous remercie par avance.

    AKR

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Tu peux aussi utiliser un framework de log tel que log4net

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Justement dans mon cas je ne peux pas l'utiliser.
    Je dois utiliser uniquement le Framework.

    Tracer dans un fichier text de la façon la plus optimiser possible.

  4. #4
    Membre averti Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Points : 428
    Points
    428
    Par défaut
    Salut, cette petite classe devrait faire ce que tu veux :

    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
     
    using System.IO;
    using System.Diagnostics;
    using System.Runtime.CompilerServices;
     
    public enum LogType
    {
    	Information, 
    	Warning, 
    	Critical
    }
     
    public static class Log
    {
    	[MethodImpl(MethodImplOptions.Synchronized), Conditional("DEBUG")]
    	public static void Add(string message, LogType type)
    	{
    		StackFrame sf = new StackFrame(1);
    		string s = string.Format("[{0}]\t{1}\t{2}\t{3}\r\n", type, DateTime.Now, sf.GetMethod().Name, message);
    		File.AppendAllText("c:\\log.txt", s);
    	}
    }
    Si on reprend ton code de départ ça donnerait ça :

    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
     
    private void TestTrace()
    {
    	Log.Add("Début", LogType.Information);
    	try
    	{
    		int unChiffre = 0;
    		int resultat = (10 / unChiffre);
    	}
    	catch (Exception ex)
    	{
    		Log.Add(ex.Message, LogType.Warning);
    	}
    	Log.Add("Fin", LogType.Information);
    }

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup _PascalC_
    C'est pile poile ce dont j'avais besoin.
    Le résultat dans le fichier texte est très clair.

    Merci beaucoup.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Si je peux abuser un peu.
    J'ai regardé sur le net mais je ne comprend pas cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [MethodImpl(MethodImplOptions.Synchronized), Conditional("DEBUG")]

  7. #7
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    A vue de nez cela doit vouloir dire que la fonction n'est compilée qu'en mode DEBUG et non RELEASE.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  8. #8
    Membre averti Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Points : 428
    Points
    428
    Par défaut
    Salut, content que ça t'ait aidé
    le premier attribut [[MethodImpl(MethodImplOptions.Synchronized)] permet de gérer le cas où 2 threads différents ajouteraient en même temps une trace de le fichier de log ce qui pourrait poser problème dans le cas d'une opération d'écriture dans un fichier. Le second attribut [Conditional("DEBUG")] permet effectivement d'indiquer que la méthode ne sera compilée qu'en mode DEBUG en non en RELEASE et il en est de même pour tous les appels à cette méthode. Autrement dit dans l'exemple plus haut, même la ligne suivante ne sera pas compilée : "Log.Add("Début", LogType.Information);"
    Dans notre cas cet attribut est plus pratique que l'usage d'une constante de compilation :

    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
     
     
        class Program
        {
            static void Main(string[] args)
            {
    		Log.Add("Hello !!!", LogType.Information); 
    		//erreur à la compilation en mode release car la classe Log ainsi que sa méthode Add n'hexiste pas !
            }
        }
     
     
    #if DEBUG
        public static class Log
        {
            [MethodImpl(MethodImplOptions.Synchronized)]
            public static void Add(string message, LogType type)
            {
                StackFrame sf = new StackFrame(1);
                string s = string.Format("[{0}]\t{1}\t{2}\t{3}\r\n", type, DateTime.Now, sf.GetMethod().Name, message);
                File.AppendAllText("c:\\log.txt", s);
            }
        }
    #endif
    Pour que ça marche ici il faudrait encadrer chaque appel Log.Add(...) avec un #if DEBUG .... #endif comme 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
     
        class Program
        {
            static void Main(string[] args)
            {
    #if DEBUG
    		Log.Add("Début", LogType.Information); 
    #endif
    		Console.WriteLine("toto");
    #if DEBUG
    		Log.Add("Fin", LogType.Information); 
    #endif
     
            }
        }
    Le truc vite lourd dingue quoi....

    Pascal

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup Immobilis et _PascalC_ pour vos réponses.
    Cette façon de faire est très intéressante.
    Je vais essayer d'approfondir le sujet.

    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire une bonne MFC
    Par fabche dans le forum MFC
    Réponses: 4
    Dernier message: 23/05/2008, 11h42
  2. comment faire une bonne défragmentation ?
    Par Pommedeterre dans le forum Windows XP
    Réponses: 28
    Dernier message: 14/03/2008, 10h06
  3. Réponses: 2
    Dernier message: 03/05/2004, 12h13
  4. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 00h13
  5. Réponses: 10
    Dernier message: 10/10/2003, 14h25

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