Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Log Datei (https://www.delphipraxis.net/184133-log-datei.html)

Walter Landwehr 1. Mär 2015 13:50

Log Datei
 
Hallo,

gibt es eine Möglichkeit oder Tool alle Schritte eines Delphi-Programms gerade beim starten in eine Log-Datei zu schreiben?

SMO 1. Mär 2015 15:02

AW: Log Datei
 
Was verstehst du unter "alle Schritte" und für was würdest du eine solche Logdatei brauchen?

Perlsau 1. Mär 2015 16:01

AW: Log Datei
 
Zitat:

Zitat von Walter Landwehr (Beitrag 1291911)
Hallo, gibt es eine Möglichkeit oder Tool alle Schritte eines Delphi-Programms gerade beim starten in eine Log-Datei zu schreiben?

Klar gibt es die: Du deklarierst eine globale TStringList und erweiterst die zu loggenden Methoden, um via Add den gewünschten Text hinzuzufügen. Nach jedem Add speicherst du die Stringliste via SaveToFile.

Wozu du das benötigst, würde natürlich auch mich interessieren.

Walter Landwehr 1. Mär 2015 16:22

AW: Log Datei
 
OK, ich habe beim starten meiner Anwendung im Netz (nur im Netz und nur auf Windows 8.1 Rechner einfach einen Absturz. Das Programm hängt sich auf aber nicht immer.) Ich will einfach herausfinden an welcher Stelle das Problem liegt. Ich habe jetzt gerade eben herausgefunden das beim starten es am lesen aus der registry liegt. Schreib- / Lese- Rechte hat der Benutzer aber.

Ebenso erhalte ich eine Schutzverletzung beim Schließen der Anwendung. (Close)

SMO 1. Mär 2015 17:09

AW: Log Datei
 
Zitat:

Zitat von Perlsau (Beitrag 1291922)
Klar gibt es die: Du deklarierst eine globale TStringList und erweiterst die zu loggenden Methoden, um via Add den gewünschten Text hinzuzufügen. Nach jedem Add speicherst du die Stringliste via SaveToFile.

Das halte ich für keine gute Idee, jedenfalls nicht bei längeren Logs. Denn dann werden massenhaft unnötig Daten auf Platte geschrieben (jedes Mal die komplette StringList statt nur des letzten Eintrags).

Ich verwende für solche Fälle eine eigene, kleine Logger-Klasse, die wahlweise den Logtext in einem Konsolenfenster ausgibt, an OutputDebugString sendet, in eine Textdatei oder eine Html-Datei schreibt. Konsole und Html unterstützen dabei verschiedene Farben, was den Logtext leserlicher machen kann.

Zitat:

Zitat von Walter Landwehr (Beitrag 1291925)
OK, ich habe beim starten meiner Anwendung im Netz (nur im Netz und nur auf Windows 8.1 Rechner einfach einen Absturz. Das Programm hängt sich auf aber nicht immer.)

Was bedeutet starten im Netz?
Wenn das Log keine Datei sein muss, dann würde ich dir raten, eine Ausgabe auf Konsole zu probieren.
Dazu einfach AllocConsole aufrufen (erzeugt das Konsolenfester für dein Programm), danach kann dein Programm per WriteLn auf die Konsole schreiben, selbst wenn es eine VCL-Anwendung ist.
Alternativ eben OutputDebugString - dabei bleibt die Ausgabe unsichtbar, du musst ein spezielles Programm wie den Delphi-Debugger oder DebugView benutzen, um sie zu sehen.

Perlsau 1. Mär 2015 18:06

AW: Log Datei
 
Zitat:

Zitat von SMO (Beitrag 1291929)
Zitat:

Zitat von Perlsau (Beitrag 1291922)
Klar gibt es die: Du deklarierst eine globale TStringList und erweiterst die zu loggenden Methoden, um via Add den gewünschten Text hinzuzufügen. Nach jedem Add speicherst du die Stringliste via SaveToFile.

Das halte ich für keine gute Idee, jedenfalls nicht bei längeren Logs. Denn dann werden massenhaft unnötig Daten auf Platte geschrieben (jedes Mal die komplette StringList statt nur des letzten Eintrags).

Ich verwende für solche Fälle eine eigene, kleine Logger-Klasse, die wahlweise den Logtext in einem Konsolenfenster ausgibt, an OutputDebugString sendet, in eine Textdatei oder eine Html-Datei schreibt. Konsole und Html unterstützen dabei verschiedene Farben, was den Logtext leserlicher machen kann.

Es geht doch hier nicht darum, die perfekteste Logger-Klasse zu schreiben, sondern um schnell mal ein Problem zu lösen. Aber du hast sicher keine Einwände, deine hochexquisite Loggerklasse hier zur Verfügung zu stellen, damit dem armen Walter schnell geholfen werden kann.

Was ist dagegen einzuwenden, wenn der Debugger nicht zum gewünschen Ergebnis führt? Und was ist dagegen einzuwenden, zu Testzwecken jede Änderung der Stringliste sofort zu speichern? Nach dem Absturz kann man die Stringliste wohl eher nicht mehr speichern und alle hinzugefügten Zeilen stehen irgendwo im Speicher. Vielleicht hast du ja ein Tool, um die danach schnell aufzufinden?

Zitat:

Zitat von SMO (Beitrag 1291929)
Was bedeutet starten im Netz?

Was kann "starten im Netz" schon anderes bedeuten als eine Exe von einem anderen Rechner aus, ergo über ein Netzwerk zu starten?

Zitat:

Zitat von SMO (Beitrag 1291929)
Wenn das Log keine Datei sein muss, dann würde ich dir raten, eine Ausgabe auf Konsole zu probieren.

Die beim Absturz der Anwendung natürlich weiterhin sichtbar bleibt, oder doch nicht?

Zitat:

Zitat von SMO (Beitrag 1291929)
Dazu einfach AttachConsole aufrufen (erzeugt das Konsolenfester für dein Programm), danach kann dein Programm per WriteLn auf die Konsole schreiben, selbst wenn es eine VCL-Anwendung ist.
Alternativ eben OutputDebugString - dabei bleibt die Ausgabe unsichtbar, du musst ein spezielles Programm wie den Delphi-Debugger oder DebugView benutzen, um sie zu sehen.

Alles in allem sehr schnell und effizient durchführbare Lösungsvorschläge, alle Achtung :thumb: :stupid:

Perlsau 1. Mär 2015 18:14

AW: Log Datei
 
Zitat:

Zitat von Walter Landwehr (Beitrag 1291925)
OK, ich habe beim starten meiner Anwendung im Netz (nur im Netz und nur auf Windows 8.1 Rechner einfach einen Absturz. Das Programm hängt sich auf aber nicht immer.) Ich will einfach herausfinden an welcher Stelle das Problem liegt. Ich habe jetzt gerade eben herausgefunden das beim starten es am lesen aus der registry liegt. Schreib- / Lese- Rechte hat der Benutzer aber.

  1. Tritt der Fehler beim Durchsteppen nicht auf?
  2. Was machst du da genau?
  3. Hast du beim Zugriff auf die Registry keine Exception-Behandlung eingebaut?
  4. Tritt der Fehler nur beim Starten von einem anderen Rechner aus auf? Das könnte darauf hinweisen, daß die Registry auf dem anderen Rechner nicht den Erwartungen entspricht, in welcher Richtung auch immer.
Zitat:

Zitat von Walter Landwehr (Beitrag 1291925)
Ebenso erhalte ich eine Schutzverletzung beim Schließen der Anwendung. (Close)

Schutzverletzung beim Close deutet meistens darauf hin, daß schon bestimmte Ressourcen weg sind, auf die dann nochmal zugegriffen wird. Hatte ich z.B. gestern, nachdem ich in einem Frame, der auf der Mainform gezeigt wird, einen Beenden-Button unterbrachte. In dessen Ereignisprozedur löste ich ein Ereignis aus, das in der Mainform den Close-Befehl ausführte mit allen dazugerhörigen Aufräumarbeiten, u.a. auch FreeAndNil meines Frames. Zum Rückspringen war dann natürlich nichts mehr da, und das ergab dann die Schutzverletzung beim Beenden. War mir eigentlich sofort klar, nachdem ich das einmal ausprobiert hatte :pale:

Walter Landwehr 1. Mär 2015 18:49

AW: Log Datei
 
Danke Perlsau,

Dein Tipp hat zum erhofften Erfolg geführt. Nun konnte ich mit Hilfe der Log Datei den Fehler analysieren und beheben. Hier ging es wirklich nur um den einmaligen Test von einem Netzwerk-User aus.

Besten Dank nochmals.

SMO 1. Mär 2015 18:55

AW: Log Datei
 
Zitat:

Zitat von Perlsau (Beitrag 1291936)
Es geht doch hier nicht darum, die perfekteste Logger-Klasse zu schreiben, sondern um schnell mal ein Problem zu lösen. Aber du hast sicher keine Einwände, deine hochexquisite Loggerklasse hier zur Verfügung zu stellen, damit dem armen Walter schnell geholfen werden kann.

Könnte ich machen, aber dann hättest ja auch du Zugriff darauf und das kannst du dir jetzt dank deiner pflaumigen Antwort abschminken! :-D
Wenn Walter sie möchte kann er mir eine PN schreiben, aber das hat sich wohl erledigt.

Zitat:

Zitat von Perlsau (Beitrag 1291936)
Was ist dagegen einzuwenden, wenn der Debugger nicht zum gewünschen Ergebnis führt?

Walter hat nichts über den Debugger gesagt. Vielleicht kann er ihn gar nicht einsetzen, daher auch meine Frage wegen "starten im Netz".

Zitat:

Zitat von Perlsau (Beitrag 1291936)
Und was ist dagegen einzuwenden, zu Testzwecken jede Änderung der Stringliste sofort zu speichern? Nach dem Absturz kann man die Stringliste wohl eher nicht mehr speichern und alle hinzugefügten Zeilen stehen irgendwo im Speicher.

Ganz einfach: wenn ein Programm abstürzt kurz nachdem es einen schreibenden Dateizugriff getätigt hat, dann kann es durchaus vorkommen, dass die geschriebenen Daten noch im Pufferspeicher sind und noch nicht auf der Platte gelandet sind. Dorthin schaffen sie es dann auch nicht mehr nach dem Absturz. Das heißt dass die letzten Zeilen fehlen können. Bei deiner Methode, die die Logdatei jedes Mal komplett löscht und neu schreibt können somit auch wesentlich mehr als nur die letzten Zeilen fehlen, nämlich alle. Das muss nicht passieren, aber es kann.

Zitat:

Zitat von Perlsau (Beitrag 1291936)
Alles in allem sehr schnell und effizient durchführbare Lösungsvorschläge, alle Achtung :thumb: :stupid:

Wie ich sehe hast du dir die zweite Hälfte deines Benutzernamens redlich verdient. :thumb:

Perlsau 1. Mär 2015 20:32

AW: Log Datei
 
Zitat:

Zitat von Walter Landwehr (Beitrag 1291947)
Danke Perlsau,
Dein Tipp hat zum erhofften Erfolg geführt. Nun konnte ich mit Hilfe der Log Datei den Fehler analysieren und beheben. Hier ging es wirklich nur um den einmaligen Test von einem Netzwerk-User aus.

Das war mir gleich klar, daß du keine aufwendige Logging-Klasse installieren oder gar selber basteln wolltest :lol:

Zitat:

Zitat von Walter Landwehr (Beitrag 1291947)
Besten Dank nochmals.

Freut mich & keine Ursache, wir helfen hier doch alle gerne :-D

Zitat:

Zitat von SMO (Beitrag 1291949)
Zitat:

Zitat von Perlsau (Beitrag 1291936)
Alles in allem sehr schnell und effizient durchführbare Lösungsvorschläge, alle Achtung :thumb: :stupid:

Wie ich sehe hast du dir die zweite Hälfte deines Benutzernamens redlich verdient. :thumb:

.

Verstehe ich nicht. Könntest du das bitte etwas näher erläutern? Welches ist denn deiner Ansicht nach die zweite Hälfte meines Benutzernamens, der sich tatsächlich von der Au der Perle ableitet? Du meintest das "Au"? Tut dir was weh?

Und wie hätte ich mir diesen Nickname angeblich "redlich verdient"? Ich habe mir diesen Namen ganz im Gegenteil ohne jegliches Verdienst selbst ausgesucht, er wurde mir auch von niemanden als Bezahlung oder Entgelt zugewiesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz