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
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
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.
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 !"
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.
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
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 :Envoyé par sjrd
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 !"
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.
???
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 !"
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.
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.alors comment se fait il que ca ne puisse se faire tout seul
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.quel est xactement l'intérêt d'un fichier log alors?
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).Car normalement quand il y a plantag, celui ci permet , enfin peut être, de savoir d'où le bug est venu...
"It's more fun to compute !"
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
Mon Tutoriel sur le développement Intraweb
N'oubliez pas de consulter les FAQ Delphi ainsi que les Cours et tutoriels sur la programmation Delphi
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
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 :
de meme pour la sortie de la procedure (attention aux Exit !!) mais cela est evenetuelement moins important.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 12:34.456 - [METHOD] Entree dans la methode MonObjet.MaMethode
ensuite tu peux ajouter des ligens de commentaires du genre :
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 - [COMMENT] Je suis pas arrive a ce point
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 :
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 12:34.456 - [CHECK] Verification de l'etat de la variable : s = Toto
Bonne prog !
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']));
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
Merci
je vais adopter ta méthode je pense
elle m'a l'air simple et claire
dont act
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 :/elle m'a l'air simple et claire
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
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager