2014-05-18 18:09:07 +00:00
|
|
|
unit X2Log.Intf;
|
|
|
|
|
|
|
|
interface
|
|
|
|
uses
|
2014-05-30 12:51:01 +00:00
|
|
|
System.Classes,
|
2014-05-18 18:09:07 +00:00
|
|
|
System.SysUtils;
|
|
|
|
|
2014-05-30 12:51:01 +00:00
|
|
|
|
2014-05-18 18:09:07 +00:00
|
|
|
type
|
|
|
|
TX2LogLevel = (Verbose, Info, Warning, Error);
|
2014-05-31 20:47:52 +00:00
|
|
|
TX2LogLevels = set of TX2LogLevel;
|
2014-05-18 18:09:07 +00:00
|
|
|
|
|
|
|
|
2014-05-26 17:20:27 +00:00
|
|
|
const
|
|
|
|
X2LogLevelsAll = [Low(TX2LogLevel)..High(TX2LogLevel)];
|
|
|
|
X2LogLevelsDefault = X2LogLevelsAll - [Verbose];
|
|
|
|
|
|
|
|
|
|
|
|
type
|
2014-05-30 12:51:01 +00:00
|
|
|
{ Details }
|
|
|
|
IX2LogDetails = interface
|
|
|
|
['{86F24F52-CE1F-4A79-936F-A5805D84E18A}']
|
2014-05-31 20:10:10 +00:00
|
|
|
function GetSerializerIID: TGUID;
|
|
|
|
|
|
|
|
property SerializerIID: TGUID read GetSerializerIID;
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
IX2LogDetailsSerializer = interface
|
|
|
|
['{E75F6F4E-A671-4622-878C-F59C64FB1320}']
|
|
|
|
procedure Serialize(ADetails: IX2LogDetails; AStream: TStream);
|
|
|
|
function Deserialize(AStream: TStream): IX2LogDetails;
|
2014-05-30 12:51:01 +00:00
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
IX2LogDetailsCopyable = interface
|
|
|
|
['{BA93B3CD-4F05-4887-A585-78093E0B31C9}']
|
|
|
|
procedure CopyToClipboard;
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
IX2LogDetailsStreamable = interface
|
|
|
|
['{7DD0756D-F06E-4267-A433-04BEFF4FA955}']
|
|
|
|
procedure SaveToStream(AStream: TStream);
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
IX2LogDetailsText = interface(IX2LogDetails)
|
|
|
|
['{D5F194E9-8633-4575-801D-E8983124118F}']
|
|
|
|
function GetAsString: string;
|
|
|
|
|
|
|
|
property AsString: string read GetAsString;
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
IX2LogDetailsBinary = interface(IX2LogDetails)
|
|
|
|
['{265739E7-BB65-434B-BCD3-BB89B936A854}']
|
|
|
|
function GetAsStream: TStream;
|
|
|
|
|
|
|
|
{ Note: Stream Position will be reset by GetAsStream }
|
|
|
|
property AsStream: TStream read GetAsStream;
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
{ Logging }
|
2014-05-25 14:20:58 +00:00
|
|
|
IX2LogBase = interface
|
2014-05-18 18:09:07 +00:00
|
|
|
['{1949E8DC-6DC5-43DC-B678-55CF8274E79D}']
|
2014-05-30 12:51:01 +00:00
|
|
|
procedure Log(ALevel: TX2LogLevel; const AMessage: string; ADetails: IX2LogDetails = nil); overload;
|
2014-05-18 18:09:07 +00:00
|
|
|
end;
|
|
|
|
|
|
|
|
|
2014-05-25 14:20:58 +00:00
|
|
|
IX2LogObserver = interface(IX2LogBase)
|
2014-05-18 18:09:07 +00:00
|
|
|
['{CBC5C18E-84EE-43F4-8DBE-C66D06FCDE74}']
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
IX2LogExceptionStrategy = interface
|
|
|
|
['{C0B7950E-BE0A-4A21-A7C5-F8322FD4E205}']
|
2014-05-30 12:51:01 +00:00
|
|
|
procedure Execute(AException: Exception; var AMessage: string; var ADetails: IX2LogDetails);
|
2014-05-18 18:09:07 +00:00
|
|
|
end;
|
|
|
|
|
|
|
|
|
2014-05-25 14:20:58 +00:00
|
|
|
IX2LogObservable = interface(IX2LogBase)
|
|
|
|
['{50B47D5D-11E4-40E0-BBC4-8BA70697C1F9}']
|
2014-05-18 18:09:07 +00:00
|
|
|
procedure Attach(AObserver: IX2LogObserver);
|
|
|
|
procedure Detach(AObserver: IX2LogObserver);
|
2014-05-25 14:20:58 +00:00
|
|
|
end;
|
|
|
|
|
2014-05-18 18:09:07 +00:00
|
|
|
|
2014-05-25 14:20:58 +00:00
|
|
|
IX2Log = interface(IX2LogObservable)
|
|
|
|
['{A6FF38F9-EDA8-4C76-9C95-2C0317560D78}']
|
2014-05-18 18:09:07 +00:00
|
|
|
procedure SetExceptionStrategy(AStrategy: IX2LogExceptionStrategy);
|
|
|
|
|
|
|
|
procedure Verbose(const AMessage: string; const ADetails: string = '');
|
2014-05-30 12:51:01 +00:00
|
|
|
procedure VerboseEx(const AMessage: string; ADetails: IX2LogDetails = nil);
|
|
|
|
|
2014-05-18 18:09:07 +00:00
|
|
|
procedure Info(const AMessage: string; const ADetails: string = '');
|
2014-05-30 12:51:01 +00:00
|
|
|
procedure InfoEx(const AMessage: string; ADetails: IX2LogDetails = nil);
|
|
|
|
|
2014-05-18 18:09:07 +00:00
|
|
|
procedure Warning(const AMessage: string; const ADetails: string = '');
|
2014-05-30 12:51:01 +00:00
|
|
|
procedure WarningEx(const AMessage: string; ADetails: IX2LogDetails = nil);
|
|
|
|
|
2014-05-18 18:09:07 +00:00
|
|
|
procedure Error(const AMessage: string; const ADetails: string = '');
|
2014-05-30 12:51:01 +00:00
|
|
|
procedure ErrorEx(const AMessage: string; ADetails: IX2LogDetails = nil);
|
|
|
|
|
|
|
|
procedure Exception(AException: Exception; const AMessage: string = '');
|
2014-05-18 18:09:07 +00:00
|
|
|
end;
|
|
|
|
|
|
|
|
|
2014-05-25 14:20:58 +00:00
|
|
|
|
|
|
|
TX2LogMessageHeaderV1 = packed record
|
|
|
|
ID: Word;
|
|
|
|
Version: Byte;
|
|
|
|
Size: Word;
|
|
|
|
Level: TX2LogLevel;
|
|
|
|
|
|
|
|
{
|
|
|
|
Payload:
|
|
|
|
|
|
|
|
MessageLength: Cardinal
|
|
|
|
Message: WideString
|
|
|
|
DetailsLength: Cardinal
|
|
|
|
Details: WideString
|
|
|
|
}
|
|
|
|
end;
|
|
|
|
|
|
|
|
TX2LogMessageHeader = TX2LogMessageHeaderV1;
|
|
|
|
|
|
|
|
const
|
|
|
|
X2LogMessageHeader: Word = $B258;
|
|
|
|
X2LogMessageVersion: Byte = 1;
|
|
|
|
|
|
|
|
|
2014-05-18 18:09:07 +00:00
|
|
|
implementation
|
|
|
|
|
|
|
|
end.
|