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

Langage Delphi Discussion :

Comment créer un fichier log ?


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 100
    Points : 53
    Points
    53
    Par défaut Comment créer un fichier log ?
    comment puis je créer un fichier log et comment l'implémenter?

    j'ai cherché dans le forum mais toutes les pages qui m'intéresse ne me sont pas accessible.

    Alors si vous pouvez me renseigner, ca serait plutot sympas

    merci

    anthony

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Un fichier LOG, ce n'est jamais qu'un fichier texte avec une extension .log Donc tu peux le créer comme n'importe quel fichier texte.
    En revanche, pour qu'il soit bien mis à jour même si ton appli se bloque (ce qui le but des LOG), je te conseille d'utiliser la classe TSjrdLogFile de l'unité SjrdLogFile. Celle s'appuie sur un TFileStream pour enregistrer tes événéments LOG et donc tout est immédiat.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    On peut aussi se la jouer "old school" :

    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
    procedure TMyClass.LogLine(const AMessage: string);
    var
      F: TextFile;
    begin
      FLogAccessCS.Enter;
      try
        AssignFile(F, FLogFileName);
        if FileExists(FLogFileName) then
          Append(F)
        else
          Rewrite(F);
        try
          WriteLn(F, AMessage);
        finally
          CloseFile(F);
        end;
      finally
        FLogAccessCS.Leave;
      end;
    end;
    "It's more fun to compute !"

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Oulaa ça se voit que t'as récupéré ton code directement de ton appli multi-thread Mais pas pour tout le monde : t'aurais pu dire que FLogAccessCS était une TCriticalSection
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    vi un fichier log est un fichier texte.

    un bon fichier log est un fichier qui contient sur chaque ligne : la date(heure) un code d'evenement et un commentaire.

    Il faut penser effectivement a fermer le fichier a chaques ecriture pour valider les ecriture en cas de plantage.
    Je ne connait pas les streams a ce niveau peut etre sont ils plus sur effectivement.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Citation Envoyé par sjrd
    Oulaa ça se voit que t'as récupéré ton code directement de ton appli multi-thread Mais pas pour tout le monde : t'aurais pu dire que FLogAccessCS était une TCriticalSection
    Exact :-) De même FFilename est une propriété de la classe pointant vers le nom de fichier à écrire. Il est possible de transformer tout ca en quelque chose d'un chouia plus simple :

    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
    procedure LogLine(const AWhere, AMessage: string);
    var
      F: TextFile;
    begin
        AssignFile(F, AWhere);
        if FileExists(AWhere) then
          Append(F)
        else
          Rewrite(F);
        try
          WriteLn(F, AMessage);
        finally
          CloseFile(F);
        end;
    end;
    "It's more fun to compute !"

  7. #7
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 100
    Points : 53
    Points
    53
    Par défaut
    Une petite question

    cette fonction écrit directement dans le fichier log tout évènement qui se produit ou dois je, en plus, associer les fonctions et évènements qui doivent être pris en compte.

    ???

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Heu... Il n'y a rien d'automagique. Comment veut tu détecter automatiquement les évènements à écrire ? De quels évènements parles tu ? De ceux liés à la réception des messages Windows ?

    Basiquement, cette fonction écrit dans un fichier texte une ligne à la suite du contenu existant. Rien de plus. A toi de l'exploiter maintenant :-)

    NB: Dans certains cas, on pourrait sans doute avoir à la place du simple WriteLn la ligne suivante pour sauvegarder l'heure de l'évènement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WriteLn(F, Format('%s: %s', [DateTimeToStr(Now), AMessage]));
    "It's more fun to compute !"

  9. #9
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 100
    Points : 53
    Points
    53
    Par défaut
    merci pour vos réponses

    encore un p'tit doute

    un fichire log permet de retracer tous les évènements qui se sont produit, alors comment se fait il que ca ne puisse se faire tout seul sans avoir nous même à lui dire ce qu'il s'est passé.

    quel est xactement l'intérêt d'un fichier log alors?

    Car normalement quand il y a plantag, celui ci permet , enfin peut être, de savoir d'où le bug est venu...

    je dois vraiment pas être en phase avec ce type de fichiers.

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    alors comment se fait il que ca ne puisse se faire tout seul
    Et bien le truc, c'est que ca ne se fait pas tout seul... Il y a toujours du code derrière pour sauvegarder les évènements.

    quel est xactement l'intérêt d'un fichier log alors?
    Celui du départ, sauf que c'est toi qui doit notifier les évènements au système de gestion du fichier log. Rien n'est automatique.

    Car normalement quand il y a plantag, celui ci permet , enfin peut être, de savoir d'où le bug est venu...
    Oui, dans ce cas là, c'est plutôt un affichage de la pile d'appels qui permet de voir d'où vient le bug (c'est à dire l'enchaînement de l'appel de fonctions ayant déclenché l'exception).
    "It's more fun to compute !"

  11. #11
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    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 216
    Points : 2 303
    Points
    2 303
    Par défaut
    bonjour,

    un fichier log, n'est pas un type de fichier particulier, c'est un fichier texte avec une extension particulière. Quand tu vois une appli qui rempli un fichier log, c'est que le développeur à mis des traces à des endroits précis de son appli. Il n'y a pas de miracle, tu veux un log, tu dois écrire ce que tu veux dedans.
    Pour faire une image, c'est pas parce que tu va nommer un fichier MonTableau.xls, que le tableau que tu souhaite va se faire tout seul, tu seras bien obligé de le faire ton tableau. Le fichier log, c'est pareil

    @++
    Dany

  12. #12
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 100
    Points : 53
    Points
    53
    Par défaut
    intérêt : celui du départ ??? !!!!!!!


    c'est donc à moi de savoir ce que je veux visualiser (comme des appels de fonctions ou autres...)

    merci pour tout

  13. #13
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Pour indication moi je gere mes logs de la maniere suivante :

    J''ecrit dans le fichier une ligne de texte en entree de chaques procedure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    12:34.456 - [METHOD] Entree dans la methode MonObjet.MaMethode
    de meme pour la sortie de la procedure (attention aux Exit !!) mais cela est evenetuelement moins important.

    ensuite tu peux ajouter des ligens de commentaires du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    12:34.456 - [COMMENT] Je suis pas arrive a ce point
    et enfin j'aime bien tracer la creation de mes objets (surcharge du constructeur/destructeur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    12:34.456 - [OBJECT] Creation de l'objet MonObjet (TMaClasse)

    Mais un fichier log reste qu'un fichier texte dans leqauelle tu ecrit des information qui t'interessent dans un format qui est le plus lisible pour toi ...
    Inspire toi des logs d'autres fichier pour voir quel type d'infos et quel format adopter.

    Ha vi j'oubliais cette ligne importante aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    12:34.456 - [CHECK] Verification de l'etat de la variable : s = Toto
    et comme dit plus haut, tu peut formater ton texte sous forme de constante pour faciliter la tache :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Const
      LOGMSG_ENTER_METHODE : '%s - [METHOD] Entree dans la methode %s.%s';
     
    WriteLn(f, Format(LOGMSG_ENTER_METHOD, [DateToStr(Time), 'MonObjet', 'MaMethode']));
    Bonne prog !
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  14. #14
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 100
    Points : 53
    Points
    53
    Par défaut
    Merci

    je vais adopter ta méthode je pense
    elle m'a l'air simple et claire
    dont act

  15. #15
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    elle m'a l'air simple et claire
    Quelle que soit la methode utilisee un fichier log ne doit pas entrainer une surcharge du code .. j'ai deja tester d'implementer un programme surloggé ... avec une ligne de code sur 2 une methode d'ecriture log. le code deviens illisible :/

    Reduit au max tes appels aux methodes de logs (une seulle fonction est le mieux) et regrouppe donc toutes tes apis d'ecriture dans une unitee a part que tu reutilisera.

    Tu peut aussi encadrer tes appels par les directives de compilation conditionnelles : {$IFDEF DEBUG} .. {$ENDIF}
    (Directive DEBUG a definir ...)
    Cela te permet de supprimer tous tes logs en une ligne de code.

    Enfin pense a fermer ton fichier apres chaques lignes d'ecriure (si tu passe par les traditionnels WriteLn) et donc a le reouvrir avec Append avant ...
    Ou alors utilise un composant TFileStream qui a ce qui est dit plus haut effectue pour toi cete securite.
    Sinon en cas de plantage tes logs s'arreteraons bien plus tot que l'erreur car une partie des logs ne serons pas sauvegardé (dependant de la taille du buffer d'ecriture du fichier)
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  16. #16
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 100
    Points : 53
    Points
    53
    Par défaut
    je vais faire ce que tu me dis à part pour les directives de compilation conditionnelles que je ne maitrise pas du tout

    encore merci pour tes conseils

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

Discussions similaires

  1. Comment créer un fichier texte?
    Par Crazynoss dans le forum ASP
    Réponses: 2
    Dernier message: 08/05/2005, 19h53
  2. Réponses: 22
    Dernier message: 24/04/2005, 16h49
  3. [C#] [XML] Comment créer un fichier XML
    Par pc152 dans le forum Windows Forms
    Réponses: 12
    Dernier message: 28/09/2004, 13h41
  4. Comment créer un fichier dummy de taille donnée ?
    Par Maitre Kanter dans le forum Langage
    Réponses: 3
    Dernier message: 13/12/2003, 23h46
  5. [] [Stratégie] Comment créer un fichier log
    Par Skeezo dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 16/09/2002, 18h30

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