Součástí Delphi XE je i Express verze nástroje CodeSite.
CodeSite je dle mého celkem podařený nástroj pro logování fungující na bázi klient - server, kdy při kompilaci je do programu začleněn kód komunikačního klienta. Komunikace je pomocí zasílání zpráv WmCopyData (standard) nebo pomocí TPC/IP (volitelně, ale v plné verzi i na vzdálené počítače). Tento nástroj poskytuje zajímavé možnosti i v této Express verzi.
Živé logování
Základním módem logování je mód živého logování, kdy při prvním zápisu do "logu" je spuštěn interaktivní prohlížeč logu, který přijímá logovací informace a v reálném čase je zobrazuje.
Pro použití logování je třeba přidat jednotku CodeSiteLogging a pak v programu napsat např.
CodeSite.Send( 'logovaná informace');
což bylo hodně primitivní využití. Možností je mnohem více.
Zkusíme něco komplikovanějšího. Mějme VCL aplikaci a ve formuláři v obsluze OnCreate (při použití uvedené jednotky):
procedure TForm1.FormCreate(Sender: TObject);
var
b: TButton;
procedure Vnitrni;
begin
CodeSite.Send( 'Třetí hláška', Self );
end;
begin
// CodeSiteManager.ConnectUsingCopyData; // default
// CodeSiteManager.ConnectUsingTcp;
// CodeSiteManager.Enabled := False; // zakaz logovani
CodeSite.Send( 'První hláška', Self );
Caption := 'testovací'; // zmena Caption pro demonstraci
CodeSite.Send( 'Druhá hláška', Self );
CodeSite.EnterMethod(Self, 'Vnitrni');
Vnitrni;
CodeSite.ExitMethod(Self, 'Vnitrni'{,Result});
// test vyjimek
b := nil;
try
b.Click;
except
on E:Exception do
begin
CodeSite.SendMsg('Moje poznamka');
CodeSite.SendException(E);
end;
end;
end;
V prohlížeči logu budou postupně tyto informace (detail se zapíná kliknutím na lupu):
Všimněte si, že předáním parametru objektu jsem umožnil zobrazení detailu objektu!
Speciální pozornosti je třeba property Caption.
Trasování volání pomocí CodeSite.EnterMethod a CodeSite.ExitMethod.
Zobrazení výjimky.
Logování do souboru
Někdy je takové živé logování nepraktické (třeba u klienta) a raději oceníme soubor, který si v klidu a teple poté prohlédneme. V tomto případě provedeme "přesměrování".
var
Dest: TCodeSiteDestination;
begin
Dest := TCodeSiteDestination.Create( Self );
Dest.LogFile.Active := True;
Dest.LogFile.FileName := 'MyFirstLog.csl';
Dest.LogFile.FilePath := '$(MyDocs)';
// Dest.Viewer.Active := True; // pokud chceme i zaroven LiveView
CodeSite.Destination := Dest;
CodeSite.Send( 'do souboru', Sender );
Kde $(MyDocs) je alias pro Dokumenty. Tento soubor lze pak otevřít dříve uvedeným programem. Navíc pokud odkomentujeme uvedený řádek, bude prováděno logování jak do souboru, tak do živého prohlížení.
Poznámky
Odstranění logování je možno buďto podmíněnou kompilací, nebo v případě, že nám stačí jeho zákaz tak pomocí
CodeSiteManager.Enabled := False; // zakaz logovani
Plná verze umí logování i na vzdálený počítač via TCP (CodeSiteManager.ConnectUsingTcp), zasílání bitmap, screenshotů, streamů atd. (dle dokumentace).