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

Delphi .NET Discussion :

Utilisation de System.Diagnostics pour tracer l'application


Sujet :

Delphi .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Par défaut Utilisation de System.Diagnostics pour tracer l'application
    Bonjour,

    Je me suis inspiré de l'exemple de la FAQ sur l'utilisation des classes Debug et Trace dans une application VCL.NET sour BDS2006

    Le traçage fonctionne très bien quand l'application est lancée depuis l'EDI quelque soit le mode (normal ou debug)
    Par contre quand je lance l'exe directement depuis l'explorateur windows, le fichier de trace reste désespérément vide.

    J'utilise la classe System.Diagnostics.Trace

    SystDeTrace := System.diagnostics.TextWriterTraceListener.Create('MyApp.trace.log');
    Trace.set_AutoFlush(true);
    Trace.Listeners.add( SystDeTrace );
    Trace.WriteLine('------');
    Il y a t'il une subtilité d'utilisation qui m'aurait échappé, pour rendre le système de trace utilisable hors EDI ?

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 078
    Par défaut
    Citation Envoyé par RamDevTeam Voir le message
    Le traçage fonctionne très bien quand l'application est lancée depuis l'EDI quelque soit le mode (normal ou debug)
    Curieux, ce Normal, pour moi une application lancé par Delphi via F9, est en Debug même si pas de point d'arrêt ... cela aurait-il changé ?

    A part, ça, je suis quand Delphi 7, je me contente du bon vieux OutPutDebugString, ou alors de ma propre fonction Trace qui ne fait que créer une Form+Mémo
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Par défaut
    sous BDS2006,
    F9 = Exécuter
    shift + ctrl + F9 = Executer sans debugger
    Je pensasi que cette dernière option avait le même effet que lancer l'exe depuis l'explorateur windows mais visiblement c'est pas du tout le cas.

  4. #4
    Membre extrêmement actif
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 219
    Par défaut
    Bonjour,

    je ne connais pas la réponse, juste une suggestion : je vois dans ton extrait de code qu'il n'y a pas de chemin de préciser, peut-être est-ce une quesiton d'environnement et que le fichier de trace se créé ailleurs que lorsque tu l'execute depuis l'IDE ?

    @++
    Dany

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Par défaut
    Je m'étais posé le même question, sachant en plus que je suis sous vista.
    J'ai essayé en indiquant un chemin complet. j'ai le même soucis.

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par RamDevTeam Voir le message
    Je me suis inspiré de l'exemple de la FAQ sur l'utilisation des classes Debug et Trace
    Tu parles de ce tuto
    http://vincentlaine.developpez.com/tuto/dotnet/log/

  7. #7
    Membre éclairé
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Par défaut
    Effectivement, je me suis basé sur ce tuto et j'utilisais la classe trace au lieu de la classe debug pour avoir un tracage constant de l'application.

    J'ai détourné le problème en gérant de la manière suivante :

    J'utilise toujours les traceswitch qui facilie le paramètrage du niveau via le fichier app.config. Par contre, je me suis créé une classe spécifique qui exploite directement un fichier texte via system.IO.StreamWriter


    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
    type
      TTraceToFile = class(tobject)
      private
         class var fStream : StreamWriter;
      public
         class procedure WriteLineIf(cond : boolean; Texte : string);
         class procedure OpenFile(FileName : string);
         class procedure CloseFile;
      end;
     
     class procedure TTraceToFile.OpenFile(FileName : string);
     begin
      fstream := StreamWriter.Create(filename, true);
      fStream.AutoFlush := true;
     end;
     
     class procedure TTraceToFile.CloseFile;
     begin
      fstream.Flush;
      fstream.close;
      fstream.free;
     end;
    Concernant le tuto, il y a un point que je n'ai pas trop compris.
    Premier point :
    EventLogTraceListener eventLog = new EventLogTraceListener("MaSuperApplication"); permet d'écrire dans le journal application. Peux t'on écrire dans le journal sécurité et si oui comment ?



    Deuxième point:
    Peux t'on simultanéement utilisé 2 journaux d'événements avec des régles différentes.

    Exemple, le journal Sécurité de windows pour les événements lié à l'authentification et un journal "MyApp" pour le reste.

    J'ai eu l'impression que quand on utilise trace.writelineif(), si la condition est vraie, le système de trace envoi la ligne à écrire sur tous les listeners actifs sans exceptions. Il y t'il moyen d'associer un groupe de listener à un traceswitch et un second groupe à un autre trace switch.


    Je m'explique, je voudrais avoir le fonctionnement suivant (si c'est possible):

    2 tracesSwitch :
    TS_AppSecurite
    TS_AppLogging

    Si TS_AppSecurite est activé, je ne veux inscrire dans le journal sécurité que les événements respectant la condition TS_AppSecurite.TraceError ou TraceWarning et pas les niveaux inférieurs. les modes error, warning, infos et verbose devant aller exclusivement dans le fichier log n°1.

    Même raisonnement en paralélle pour le TS_AppLogging, si la trace est activée, seul les niveaux error et warning sont envoyé dans le journal application et les niveaux error, warning, infos et verbose ne vont qu'uniquement dans le fichier log n°2

    Avec ma classe TraceToFile, je régle le problème de la différence de niveau entre le journal et le fichier pour une trace, par contre je ne vois pas comment faire pour dissocier les écritures sur les 2 journaux afin d'éviter qu'une ligne s'écrive de chaque côté simultanéement.

    j'espère me faire comprendre correctement.

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par RamDevTeam
    Concernant le tuto, il y a un point que je n'ai pas trop compris.
    Le mieux eut été de s'adresser directement à l'auteur, celà lui aurait permit de prendre conscience de certaines zone d'ombre dans ses explications.
    Citation Envoyé par RamDevTeam
    Peux t'on écrire dans le journal sécurité et si oui comment ?
    Voir ce document. C'est vrai qu'on retrouve sur le net beaucoup d'exemples sur comment créer un log perso qui reprennent souvent l'exemple su SDK...
    Puisqu'un des constructeurs de EventLogTraceListener attend un EventLog on peut lui indiquer la cible. Je n'ai pas testé, pas trop le temps, j'ai juste lu la doc.
    Citation Envoyé par RamDevTeam
    Deuxième point:
    Peux t'on simultanément utiliser 2 journaux d'événements avec des régles différentes.
    Désolé je n'ai pas creusé le sujet mais c'est une question qui a du sens effectivement. Le mieux, à ce sujet, est de poster dans le forum C#.
    Peut être en créant un listener personnalisé ???
    Citation Envoyé par RamDevTeam
    j'espère me faire comprendre correctement.
    Oh que oui. Comme on dit "Aide toi le ciel t'aidera"

    Sinon une autre approche possible avec la gestion des logs : http://logging.apache.org/log4net/
    Mais ici, même interrogation concernant ta seconde question.

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/09/2014, 10h36
  2. [Débutant] Comment utiliser Visualiseur du Debugger pour tracer un soft (c#)?
    Par Dudule70 dans le forum C#
    Réponses: 0
    Dernier message: 28/12/2012, 13h14
  3. [TPTP] Utiliser TPTP pour tracer une application.
    Par Pierre8r dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 30/03/2009, 21h12
  4. Réponses: 2
    Dernier message: 06/10/2008, 10h04
  5. touche pour accéder à une application : hook system?
    Par Fox_magic dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 22/01/2003, 00h02

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