Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wie kann ich exe.log Files für mein Program erstellen? (https://www.delphipraxis.net/136805-wie-kann-ich-exe-log-files-fuer-mein-program-erstellen.html)

aaaaaaaaaa_10 8. Jul 2009 09:20


Wie kann ich exe.log Files für mein Program erstellen?
 
Hallo,
ich möchte mir log Files meines Programms ausgeben lassen. Allerdings weiß ich nicht, wie ich das machen kann? Mir wurde naher gelegt den JCL Debug expert zu benutzen, aber ich bekomme es damit nicht hin. Kann mir jemand helfen? :cry:

Luckie 8. Jul 2009 10:13

Re: Wie kann ich exe.log Files für mein Program erstellen?
 
Zitat:

Zitat von aaaaaaaaaa_10
ich möchte mir log Files meines Programms ausgeben lassen.

Soll dein Programm während es läuft eine Logdatei anlegen und in diese schreiben oder willst du eine vorhandene Logdatei anzeigen? Eine etwas verständlichere Ausdrucksweise wäre recht hilfreich.

Andreas L. 8. Jul 2009 10:15

Re: Wie kann ich exe.log Files für mein Program erstellen?
 
Du musst dich um das erstellen der Log-Datei schon selber kümmern. Mach dir Gedanken darüber welche Infos in der Log enthalten sein sollen. Dann definierst du dir eine globale Variable von Typ TStrings, erstellst diese im onCreate als TStringList und an allen wichtigen Stellen wie z. B. Laden der Einstellungen fügst du der Liste einen Eintrag hinzu z. B. "Laden: C:\Config.dat". Natürlich gibts da noch ganz andere Möglichkeiten ein Logsystem zu realisieren, kommt halt drauf an welche Infos du brauchst und wie komplex deine Anwendung schon ist.

Stormy 8. Jul 2009 10:15

Re: Wie kann ich exe.log Files für mein Program erstellen?
 
Hi,

ich weiß ja nicht genau was du loggen willst aber ich würde dir dafür TIniFile oder TextFile empfehlen.


Gruß
Stormy

aaaaaaaaaa_10 8. Jul 2009 10:25

Re: Wie kann ich exe.log Files für mein Program erstellen?
 
Also, das Problem hat sich etwas gewendet. Ich habe einträge für den logfile zwischen {$IFDEF name} und {$ENDIF} eingebunden. wenn ich jetzt unter projekteinstellungen -> definitionen 'name' eingebe und dann das programm ausführe, passiert aber nichts

Luckie 8. Jul 2009 10:32

Re: Wie kann ich exe.log Files für mein Program erstellen?
 
Zitat:

Zitat von aaaaaaaaaa_10
Ich habe einträge für den logfile zwischen {$IFDEF name} und {$ENDIF} eingebunden.

Zeig mal Code. Ich habe keine Ahnung, was du meinst oder was du gemacht hast.

aaaaaaaaaa_10 8. Jul 2009 10:34

Re: Wie kann ich exe.log Files für mein Program erstellen?
 
{$IFDEF DebugLogging}
dbg.Add('TKomMainWnd.DateiNameMittelwerte');
{$ENDIF}

überall im programm hab ich solche anweisungen

aaaaaaaaaa_10 8. Jul 2009 10:38

Re: Wie kann ich exe.log Files für mein Program erstellen?
 
und das steht in der zugehörigen unit:
Code:
procedure TDebugLog.Add(text: String);
var
   t: TDateTime;
  f: TextFile;
begin
   if (not Assigned(Self)) then
     Exit;
   t := Now;
  EnterCriticalSection(csDL);
  AssignFile(f, FName);
  try
     try
        Append(f);
        WriteLn(f, FormatDateTime('c.zzz - ', t)+text);
     except
        raise Exception.Create('In DebugLog kann nicht geschrieben werden!');
      end;
  finally
     try
        CloseFile(f);
    except
    end;
  end;
  LeaveCriticalSection(csDL);
end;

constructor TDebugLog.Create(path: String);
var
   i: Integer;
  lastTime: TDateTime;
  fn: String;
  fnFound: Boolean;
  f: file;
begin
   inherited Create;
  InitializeCriticalSection(csDL);

   fnFound := false;
  lastTime := 0;
  for i := 1 to 5 do begin
     fn := path+IntToStr(i)+'.log';
     if FileExists(fn) then begin
         if (lastTime > FileDateToDateTime(FileAge(fn))) then begin
         fnFound := true;
        break;
      end else begin
         lastTime := FileDateToDateTime(FileAge(fn));
      end;
    end else begin
       fnFound := true;
      break;
    end;
  end;
  if (not fnFound) then
     fn := path+'1.log';

  FName := fn;

  EnterCriticalSection(csDL);
  AssignFile(f, FName);
  try
     try
        Rewrite(f);
     except
        raise Exception.Create('DebugLog kann nicht angelegt werden!');
     end;
  finally
     try
        CloseFile(f);
    except
    end;
  end;
  LeaveCriticalSection(csDL);
end;

destructor TDebugLog.Destroy;
begin
   DeleteCriticalSection(csDL);
  inherited;
end;

end.

messie 8. Jul 2009 11:16

Re: Wie kann ich exe.log Files für mein Program erstellen?
 
Delphi-Quellcode:
if (not Assigned(Self)) then
     Exit;
Das ist ja eine interessante Anweisung. Wozu ist die gut?

Grüße, Messie

Edit: unsinnige Frage gestrichen

Stormy 8. Jul 2009 11:17

Re: Wie kann ich exe.log Files für mein Program erstellen?
 
Wie und wo hast du "dbg" deklariert? Hast du mal ein Brakepoint auf die Zeile
Delphi-Quellcode:
dbg.Add('TKomMainWnd.DateiNameMittelwerte');
gesetzt und geguckt ob sie überhaupt ausgeführt wird?


Gruß
Stormy

aaaaaaaaaa_10 8. Jul 2009 12:01

Re: Wie kann ich exe.log Files für mein Program erstellen?
 
ja, wird ausgeführt... dbg hab ich in einer anderen unit deklariert als TDebugLog, welches die KLasse des vorherigen quellcodes ist

Stormy 8. Jul 2009 12:08

Re: Wie kann ich exe.log Files für mein Program erstellen?
 
Step dann doch mal dort rein und guck wo genau es abbricht.

aaaaaaaaaa_10 8. Jul 2009 12:13

Re: Wie kann ich exe.log Files für mein Program erstellen?
 
wie mach ich das? musst entschuldigen,bin noch nicht so lange bei ...

Stormy 8. Jul 2009 12:30

Re: Wie kann ich exe.log Files für mein Program erstellen?
 
Setz den Brakepoint auf
Delphi-Quellcode:
dbg.Add('TKomMainWnd.DateiNameMittelwerte');
und wenn das Programm dann diese Zeile ausführen will sollte es anhalten.
Anschließend kannst du mit F7 dort rein "Steppen" und wahlweise mit F8 oder weiter mit F7
solange die einzelnen Anweisungen durchsteppen bis du an die Zeile kommst welche dafür
Verantwortlich ist das entweder nichts passiert oder der weitere Ablauf abbricht.

aaaaaaaaaa_10 8. Jul 2009 13:14

Re: Wie kann ich exe.log Files für mein Program erstellen?
 
danke, habs gemacht und festgestellt, dass ich den create constructor zu spät (also bereits nach add befehlen definiert habe. hab ihn jetzt "versetzt" und es geht... :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 Uhr.

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