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

C# Discussion :

Duplication de fichier de trace (System.Diagnostics)


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Points : 57
    Points
    57
    Par défaut Duplication de fichier de trace (System.Diagnostics)
    Bonjour à tous,

    Pour un service que j'ai créer, j'utilise un fichier de trace déclaré comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <!-- La trace -->
        <system.diagnostics>
          <trace autoflush="true" indentsize="4">
            <listeners>
              <add name="myListener"
                type="System.Diagnostics.TextWriterTraceListener"
                initializeData="TraceLog.txt" />
              <remove name="Default" />
            </listeners>
          </trace>
        </system.diagnostics>
    Etant donné que je veux le fichier de trace à l'endroit où est installé le service, j'appelle cette méthode, au démarrage de ce dernier:
    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
     
    public static void InitTraceLog()
            {
                if (Trace.Listeners.Count > 0) 
                {
                    // On récupère le listener déclaré
                    TextWriterTraceListener oldListener = (TextWriterTraceListener)Trace.Listeners[0]; 
     
                    string sPathDyn = Path.Combine(System.Windows.Forms.Application.StartupPath, "TraceLog.txt");
                    if (!File.Exists(sPathDyn))
                        File.Create(sPathDyn);
     
                    // Construction d'un nouveau listener avec les paramètres de l'ancien et un chemin dynamique
                    TextWriterTraceListener newListener = new TextWriterTraceListener(sPathDyn);
                    newListener.TraceOutputOptions = oldListener.TraceOutputOptions;
                    Trace.AutoFlush = true;
     
                    Trace.Listeners.RemoveAt(0);        // On dégage le listener courant
                    Trace.Listeners.Add(newListener);   // et on ajoute le nouveau
                }
            }
    Ce code fonctionne bien. Par contre si le fichier Tracelog.txt n’existe pas au lancement du service, je me retrouve avec deux fichiers :
    1) TraceLog.txt => créer avec la ligne File.Create(sPathDyn);
    2) a81b86ad-d62a-4adc-84a2-ff5862724feaTraceLog.txt => créer dès que j'appelle Trace.WriteLine() dans le code du service! Et c'est ce dernier qui est utilisé pour toutes les traces!

    Dans le cas où le fichier Tracelog.txt existe deja (quand je redémarre mon service par exemple). C'est bien le tracelog.txt qui est utilisé. Et il n'y a pas d'autre fichier style "GUID"Tracelog.txt de créé!

    Ca n'est pas très embêtant dans l'absolue, mais je n'arrive pas à savoir d'où sors ce "GUID"Tracelog.txt et pourquoi?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    A priori TraceLog.txt est créé au démarrage à cause du myListener dans le fichier de conf, et le listener que tu crées voit qu'il existe déjà, donc il génère un nom unique à la place (enfin c'est juste une théorie, c'est peut-être pas ça...)

    Essaie d'enlever myListener du fichier de conf; il sert à rien puisque de toute façons tu vas l'enlever par le code...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Points : 57
    Points
    57
    Par défaut
    Oui en effet! Et pourquoi faire simple quand on peut faire compliquer! Parce qu'en fait si je défini mon trace listener de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <system.diagnostics>
          <trace autoflush="true" indentsize="4">
            <listeners>
              <add name="myListener"
                type="System.Diagnostics.TextWriterTraceListener"
                initializeData="TraceLog.txt" />
              <remove name="Default" />
            </listeners>
          </trace>
        </system.diagnostics>
    TraceLog.txt sera tjs dans le startup path de l'appli non??? Du coup ma fonction InitTraceLog sert strictement à rien!

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par goddet Voir le message
    TraceLog.txt sera tjs dans le startup path de l'appli non???
    Plutôt dans le répertoire de travail il me semble, mais en pratique c'est presque toujours le startup path, à moins d'avoir précisé autre chose.

    Par contre fais gaffe, sous Windows Vista/7/8, un programme ne peut pas écrire Program Files (à moins de s'exécuter en tant qu'admin). Normalement il vaut mieux écrire dans le répertoire des données d'application, qui est fait pour ça

Discussions similaires

  1. Activer les traces system.diagnostics.trace
    Par soazig dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 04/05/2015, 10h06
  2. Fichiers de trace
    Par Isabella dans le forum Oracle
    Réponses: 5
    Dernier message: 25/02/2006, 13h55
  3. [C#][2.0] Traces avec System.Diagnostics.Trace
    Par slopera dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/02/2006, 09h51
  4. Réponses: 12
    Dernier message: 17/10/2005, 12h59
  5. [tomcat 5] [paramétrage] fichier de log System.out.println
    Par Aldo dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 22/02/2005, 14h41

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