unit SingletonTest;
{$MODE ObjFpc}

interface 

uses
  Classes, SysUtils, EventLog;
  
type
  TSingleton = class(TObject)
    private
      FEventLog: TEventLog;
    protected
      constructor Create;
    public
      class function GetInstance: TSingleton;
      destructor Destroy;override;
      property EventLog: TEventLog read FEventLog;
  end;
   
implementation
 
var
  Singleton: TSingleton;
 
class function TSingleton.GetInstance: TSingleton;
begin
  if (Singleton = nil) then Singleton := TSingleton.Create;
  Result := Singleton;
end;

constructor TSingleton.Create;
begin
  inherited Create;
  FEventlog := TEventlog.Create(nil);
  FEventLog.LogType := ltFile;
  FEventLog.Active := True;
end;

destructor TSingleton.Destroy;
begin
  FreeAndNil(FEventLog);
  inherited Destroy;
end;

end. 