Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi CodeSite Express 4.x (https://www.delphipraxis.net/193658-codesite-express-4-x.html)

juergen 26. Aug 2017 21:44

CodeSite Express 4.x
 
Hallo zusammen,

ich nutze noch Delphi XE mit CodeSite Express 4.x.
Ich teste gerade etwas mit CodeSite um zu sehen, ob mir das Logging weiter helfen kann. Ich hatte auch SmartInspect probiert, was mir eigentlich wesentlich zugänglicher erscheint. Da es aber anscheinend nicht mehr für neuere Delphiversionen weiterentwickelt wird, will ich mich damit eigentlich nicht mehr beschäftigen.

Ich muss ziemlich oft Schnittstellen umsetzen die im Hintergrund laufen und keine GUI haben.
Zur Laufzeit erzeuge ich gern dxMemData (von DevExpress), wo ich die Daten vorhalte.
Nun kommt es immer wieder vor, dass die Daten die ich einlese nicht so geliefert werden wie abgesprochen.

Nun meine Fragen:
1. Kann CodeSite den Inhalt meines dxMemData darstellen? (SmartInspect kann das)
2. Warum wird die Protokolldatei im nachfolgenden Code erst beim 2. Button-Klick erstellt?

Delphi-Quellcode:
procedure TForm12.Button1Click(Sender: TObject);
var
  DT: TDateTime;
  Dest: TCodeSiteDestination;
begin
  try
    try
      Dest := TCodeSiteDestination.Create(Self);
      Dest.LogFile.SetMaxSize(10000);
      Dest.LogFile.SetMaxParts(1);
      Dest.LogFile.Active := True;
      Dest.LogFile.FileName := 'LogFile_Test.csl';
      Dest.LogFile.FilePath := ExtractFilePath(ParamStr(0));
      CodeSite.DateTimeFormat := 'dd.mm.yyyy, hh:nn:zzz';
      CodeSite.EnterMethod('TForm1.Button1Click');
      DT := Now;
      CodeSite.SendDateTime(csmgreen, 'Begin: ', DT);
      CodeSite.Send(CodeSiteManager.ComputerName);
      dxMemData1.Active;
      CodeSite.Send(dxMemData1Spalte1.AsString + ';' + dxMemData1Spalte2.AsString + ';' + dxMemData1Spalte3.AsString);
      DT := Now;
      CodeSite.SendDateTime(csmgreen, 'Ende: ', Now);
      CodeSiteLogging.CodeSite.ExitMethod('TForm1.Button1Click');
    except
      on E: Exception do begin
        CodeSite.SendException(E);
        raise // re-raise the exception
      end;
    end;
  finally
    CodeSite.Destination := Dest;
  end;
end;

Vielen Dank schon mal vorab!

Uwe Raabe 26. Aug 2017 22:55

AW: CodeSite Express 4.x
 
Zitat:

Zitat von juergen (Beitrag 1379545)
1. Kann CodeSite den Inhalt meines dxMemData darstellen?

Hab jetzt kein dxMemDataSet zur Hand, aber published Properties werden von Haus aus gelogged und falls das nicht reicht, gibt es in der Vollversion noch das ICodeSiteCustomData Interface.


Zitat:

Zitat von juergen (Beitrag 1379545)
2. Warum wird die Protokolldatei im nachfolgenden Code erst beim 2. Button-Klick erstellt?

Könnte daran liegen, daß du die Destination erst im finally zuweist, nachdem du die Daten gesendet hast.

himitsu 27. Aug 2017 01:06

AW: CodeSite Express 4.x
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1379547)
Könnte daran liegen, daß du die Destination erst im finally zuweist, nachdem du die Daten gesendet hast.

Joar, erst versuchen zu loggen und danach sagen wohin das Log und alle zukünftigen Logs sollen.

Warum ignorierst du die Warnungen des Compilers?
Zitat:

Delphi-Quellcode:
var
  Dest: TCodeSiteDestination;
begin
  try
    Dest := TCodeSiteDestination.Create(Self);
    ...
  finally
    CodeSite.Destination := Dest;
  end;
end;

Variable nicht initialisiert und was glaubst du was mit Dest ist, wenn es beim Create geknallt hat?
Eine uninitialisierte Variable da zuweisen und dann hoffen dass CodeSite nicht komplett abraucht.

Zitat:

Delphi-Quellcode:
except
  CodeSite.SendException(E);

Hmmmm, wenn es da beim Einrichten von CodeSite geknallt hat, glaubst du dann wirklich, dass diese dann nicht auch noch knallt?

Und warum erstellst du die Destination mehrfach?
Beim zweiten Klick liegt das alte Dest als Leiche bis zum Programmende im Speicher, usw.

Uwe Raabe 27. Aug 2017 09:09

AW: CodeSite Express 4.x
 
Zitat:

Zitat von himitsu (Beitrag 1379548)
Zitat:

Delphi-Quellcode:
except
  CodeSite.SendException(E);

Hmmmm, wenn es da beim Einrichten von CodeSite geknallt hat, glaubst du dann wirklich, dass diese dann nicht auch noch knallt?

Wenn es beim Einrichten der Destination knallt, dann ist immer noch die Default-Destination gültig. Insofern ist das SendException hier schon gerechtfertigt. Man muss nur wissen, wo es dann ankommt (nämlich im Live-Viewer).

juergen 27. Aug 2017 18:33

AW: CodeSite Express 4.x
 
Hallo,

so, inzw. verstehe ich das CodeSite etwas besser.
Danke für Eure Hinweise! :dp:
Ich habe CodeSite nun global initialisiert, solange die Anwendung im Debug-Modus kompiliert wird. Nun kann ich in den verschiedenen Methoden die Protokollierung anstoßen.

Delphi-Quellcode:
program Test_CodeSite;

uses Forms, SysUtils,
  CodeSiteLogging,
  Unit_Test_CodeSite in 'Unit_Test_CodeSite.pas' {Form12};

{$R *.res}

var
  Destination: TCodeSiteDestination;

begin
  Application.Initialize;
{$IFDEF DEBUG}
  CodeSite.Enabled := True;
  CodeSite.Enabled := CodeSite.Installed;
  if CodeSite.Enabled then begin
    Destination := TCodeSiteDestination.Create(Application);
    Destination.LogFile.SetMaxSize(10000);
    Destination.LogFile.SetMaxParts(1);
    CodeSite.DateTimeFormat := 'dd.mm.yyyy, hh:nn:zzz';
    Destination.LogFile.FileName := ChangeFileExt(ExtractFileName(Application.ExeName), '.csl');
    Destination.LogFile.FilePath := ExtractFilePath(ParamStr(0));
    Destination.LogFile.Active := True;
    CodeSite.Destination := Destination;
    CodeSite.Clear
  end;
{$ELSE}
  CodeSite.Enabled := False;
{$ENDIF}
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm12, Form12);
  Application.Run;

end.
Das Anzeigen der Daten aus dem Dataset bekomme ich allerdings nicht hin. Evtl. geht das dann nur in der Vollversion.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:13 Uhr.

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