1
0
mirror of synced 2024-09-07 21:55:05 +00:00
x2log/X2Log.Intf.pas
2019-10-30 15:01:19 +01:00

160 lines
4.5 KiB
ObjectPascal

unit X2Log.Intf;
interface
uses
System.Classes,
System.SysUtils;
type
TX2LogLevel = (Verbose, Info, Warning, Error);
TX2LogLevels = set of TX2LogLevel;
const
X2LogLevelsAll = [Low(TX2LogLevel)..High(TX2LogLevel)];
X2LogLevelsDefault = X2LogLevelsAll - [Verbose];
type
{ Details }
IX2LogDetails = interface
['{86F24F52-CE1F-4A79-936F-A5805D84E18A}']
function GetSerializerIID: TGUID;
function Clone: IX2LogDetails;
property SerializerIID: TGUID read GetSerializerIID;
end;
IX2LogDetailsSerializer = interface
['{E75F6F4E-A671-4622-878C-F59C64FB1320}']
procedure Serialize(ADetails: IX2LogDetails; AStream: TStream);
function Deserialize(AStream: TStream): IX2LogDetails;
end;
IX2LogDetailsCopyable = interface
['{BA93B3CD-4F05-4887-A585-78093E0B31C9}']
procedure CopyToClipboard;
end;
IX2LogDetailsStreamable = interface
['{7DD0756D-F06E-4267-A433-04BEFF4FA955}']
procedure SaveToStream(AStream: TStream);
end;
{ Logging }
IX2LogBase = interface
['{1949E8DC-6DC5-43DC-B678-55CF8274E79D}']
procedure Log(ALevel: TX2LogLevel; const AMessage: string; const ACategory: string = ''; ADetails: IX2LogDetails = nil); overload;
procedure Log(ALevel: TX2LogLevel; ADateTime: TDateTime; const AMessage: string; const ACategory: string = ''; ADetails: IX2LogDetails = nil); overload;
end;
IX2LogObserver = interface(IX2LogBase)
['{CBC5C18E-84EE-43F4-8DBE-C66D06FCDE74}']
end;
TX2LogExceptionDetailsProc = reference to procedure(const AKey, AValue: string);
IX2LogExceptionStrategy = interface
['{C0B7950E-BE0A-4A21-A7C5-F8322FD4E205}']
procedure Execute(AException: Exception; out AMessage: string; AAddDetails: TX2LogExceptionDetailsProc);
end;
IX2LogObservable = interface(IX2LogBase)
['{50B47D5D-11E4-40E0-BBC4-8BA70697C1F9}']
procedure Attach(AObserver: IX2LogObserver);
procedure Detach(AObserver: IX2LogObserver);
end;
IX2Log = interface(IX2LogObservable)
['{A6FF38F9-EDA8-4C76-9C95-2C0317560D78}']
procedure SetExceptionStrategy(AStrategy: IX2LogExceptionStrategy);
function Category(const ACategory: string): IX2Log;
procedure Verbose(const AMessage: string; const ADetails: string = '');
procedure VerboseEx(const AMessage: string; ADetails: IX2LogDetails = nil);
procedure VerboseS(const AMessage: string; ANamedParams: array of const); overload;
procedure Info(const AMessage: string; const ADetails: string = '');
procedure InfoEx(const AMessage: string; ADetails: IX2LogDetails = nil);
procedure InfoS(const AMessage: string; ANamedParams: array of const); overload;
procedure Warning(const AMessage: string; const ADetails: string = '');
procedure WarningEx(const AMessage: string; ADetails: IX2LogDetails = nil);
procedure WarningS(const AMessage: string; ANamedParams: array of const); overload;
procedure Error(const AMessage: string; const ADetails: string = '');
procedure ErrorEx(const AMessage: string; ADetails: IX2LogDetails = nil);
procedure ErrorS(const AMessage: string; ANamedParams: array of const); overload;
procedure Exception(AException: Exception; const AMessage: string = '');
procedure ExceptionEx(AException: Exception; const AMessage: string = ''; const ACategory: string = '');
procedure ExceptionS(AException: Exception; const AMessage: string; ANamedParams: array of const);
end;
type
IX2LogDateTime = interface
['{F0E6196B-C7E7-46C9-8764-D457AB957534}']
function GetValue: TDateTime;
property Value: TDateTime read GetValue;
end;
{ Use this wrapper when passing a TDateTime to one of the structured logging
methods, otherwise Delphi will pass it as a floating point value. }
function LogDT: IX2LogDateTime; overload;
function LogDT(AValue: TDateTime): IX2LogDateTime; overload;
implementation
type
TX2LogDateTime = class(TInterfacedObject, IX2LogDateTime)
private
FValue: TDateTime;
public
constructor Create(AValue: TDateTime);
function GetValue: TDateTime;
end;
function LogDT: IX2LogDateTime;
begin
Result := LogDT(Now);
end;
function LogDT(AValue: TDateTime): IX2LogDateTime;
begin
Result := TX2LogDateTime.Create(AValue);
end;
{ TX2LogDateTime }
constructor TX2LogDateTime.Create(AValue: TDateTime);
begin
inherited Create;
FValue := AValue;
end;
function TX2LogDateTime.GetValue: TDateTime;
begin
Result := FValue;
end;
end.