{*******************************************************}
{                                                       }
{       Tocsg.Exception                                 }
{                                                       }
{       Copyright (C) 2022 kkuzil                       }
{                                                       }
{*******************************************************}

unit Tocsg.Exception;

interface

uses
  System.SysUtils;

type
  ETgException = class(Exception)
  public
    class procedure TraceException(E: Exception; nLogLv: Integer = 0); overload;
    class procedure TraceException(E: Exception; const sInfo: String; nLogLv: Integer = 0); overload;
    class procedure TraceException(E: Exception; const sFormat: String; const Args: array of const; nLogLv: Integer = 0); overload;
    class procedure TraceException(Sender: TObject; E: Exception; nLogLv: Integer = 0); overload;
    class procedure TraceException(Sender: TObject; E: Exception; const sInfo: String; nLogLv: Integer = 0); overload;
    class procedure TraceException(Sender: TObject; E: Exception; const sFormat: String; const Args: array of const; nLogLv: Integer = 0); overload;
  end;

implementation

uses
  Tocsg.Trace, Tocsg.Obj;

class procedure ETgException.TraceException(E: Exception; nLogLv: Integer = 0);
begin
  TTgTrace.T(Format('ETgException .. %s, Msg="%s"', [E.ClassName, E.Message]), nLogLv);
end;

class procedure ETgException.TraceException(E: Exception; const sInfo: String; nLogLv: Integer = 0);
begin
  TTgTrace.T(Format('ETgException .. %s, Msg="%s", Info = %s', [E.ClassName, E.Message, sInfo]), nLogLv);
end;

class procedure ETgException.TraceException(E: Exception; const sFormat: String; const Args: array of const; nLogLv: Integer = 0);
var
  str: String;
begin
  FmtStr(str, sFormat, Args);
  TraceException(E, str, nLogLv);
end;

class procedure ETgException.TraceException(Sender: TObject; E: Exception; nLogLv: Integer = 0);
begin
  if Sender <> nil then
    TTgTrace.T(Format('%s :: ETgException .. %s, Msg="%s"', [Sender.ClassName, E.ClassName, E.Message]), nLogLv)
  else
    TTgTrace.T(Format('Unknown Class :: ETgException .. %s - %s', [E.ClassName, E.Message]), nLogLv)
end;

class procedure ETgException.TraceException(Sender: TObject; E: Exception; const sInfo: String; nLogLv: Integer = 0);
begin
  if Sender <> nil then
    TTgTrace.T(Format('%s :: ETgException .. %s, Msg="%s" : Info = %s', [Sender.ClassName, E.ClassName, E.Message, sInfo]), nLogLv)
  else
    TTgTrace.T(Format('Unknown Class :: ETgException .. %s, Msg="%s" : Info = %s', [E.ClassName, E.Message, sInfo]), nLogLv);
end;

class procedure ETgException.TraceException(Sender: TObject; E: Exception; const sFormat: String; const Args: array of const; nLogLv: Integer = 0);
var
  str: String;
begin
  FmtStr(str, sFormat, Args);
  TraceException(Sender, E, str, nLogLv);
end;

end.
