Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#8

AW: Optimales Logging: Assert-basiert oder NULL-Logger: Ja oder besser nicht ?

  Alt 17. Dez 2019, 18:36
Was dann aber trotzdem passiert, ist das Aufrufen evtl. leerer Funtionen,
den Funktion-Call würde ich natürlich auch gerne im RELEASE wegbekommen.
Ich glaube, das hatten wir schon mal irgendwo an anderer Stelle (eventuell auch bei DP-EN oder SO). Wenn du die Methoden inline deklarierst, sollte gar kein Call mehr gemacht werden. In diesem Beispiel erzeugen die T.Init und T.Log Aufrufe keinen Code, wenn in uLogging nicht Log definiert ist.

Delphi-Quellcode:
procedure Main;
var
  T: TLog;
begin
  T.Init('TLogConsole');
  T.Log('Hallo Welt');
  Writeln('Wie geht''s?');
  Readln;
end;
Delphi-Quellcode:
unit uLogging;

interface

{.$DEFINE Log}

type
  ILog = interface
  ['{76BA1F8A-D171-4817-BB3D-337295B03CE0}']
    procedure Log(AText: string);
  end;

  TLog = record
  private
    {$IFDEF Log}
    FLog: ILog;
    {$ENDIF}
  public
    procedure Init(const AName: string); inline;
    procedure Log(AText: string); inline;
  end;

implementation

type
  TLogConsole = class(TInterfacedObject, ILog)
  public
    procedure Log(AText: string);
  end;

procedure TLogConsole.Log(AText: string);
begin
  Writeln(AText);
end;

procedure TLog.Init(const AName: string);
begin
  {$IFDEF Log}
  // der Einfachheit halber
  FLog := TLogConsole.Create;
  {$ENDIF}
end;

procedure TLog.Log(AText: string);
begin
  {$IFDEF Log}
  if FLog <> nil then begin
    FLog.Log(AText);
  end;
  {$ENDIF}
end;

end.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat