Hm, wie ermittelt das denn die Informationen zu
Unit-, Klassen- und Funktionsname mit Quelltext-Zeilennummer ?
Arnaud hat es angesprochen, du musst die Erstellung der Map-Datei detailliert für das Projekt aktivieren. Beim Programmstart wird automatisch aus der Map-Datei eine *.mab Datei erzeugt. Im obigen Beispiel ist die Map-Datei ca. 2,8MB, die Mab-Datei 0,17MB groß. Das Logging wird im
mORMot2 Framework so effizient gehandhabt, dass es kein
{$define WITHLOG} mehr gibt. Einfach selbst ausprobieren. Mit Hilfe dieser
kurzen Anleitung ist es in 3 Minuten auf dem Rechner und bei Nichtgefallen in 3 Sekunden wieder spurlos entfernt.
Nachtrag: Warum belastet Logging mit mORMot nicht? Dazu folgender Quelltext aus der
Unit mormot.core.log, Zeile 4223:
Delphi-Quellcode:
class function TSynLog.Add: TSynLog;
var
P: pointer;
begin
// inlined TSynLog.Family with direct fGlobalLog check
result := pointer(Self);
if result <> nil then
begin
P := PPointer(PAnsiChar(result) + vmtAutoTable)^;
if P <> nil then
begin
// we know TRttiCustom is in the slot, and Private is TSynLogFamily
P := TRttiCustom(P).PrivateSlot;
result := TSynLogFamily(P).fGlobalLog;
// <>nil for ptMergedInOneFile and ptIdentifiedInOneFile (most common case)
if result = nil then
result := TSynLogFamily(P).SynLog; // ptOneFilePerThread or at startup
end
else
result := nil; // TSynLog.Family/FamilyCreate should have been called
end;
end;
Gibt es keine LogFamily, ist der Overhead nur minimale Pointerei. Wer genau aufgepasst hat, sieht den Fehler in Funktion Test1 im Beispiel. Tipp: Es fehlt eine Prüfung auf Nil.
Bis bald...
Thomas