mirror of
https://github.com/danieleteti/delphimvcframework.git
synced 2024-11-18 01:05:54 +01:00
92 lines
2.2 KiB
ObjectPascal
92 lines
2.2 KiB
ObjectPascal
|
unit LoggerPro.ElasticSearchAppender;
|
||
|
|
||
|
interface
|
||
|
|
||
|
uses
|
||
|
LoggerPro,
|
||
|
System.SysUtils,
|
||
|
LoggerPro.RESTAppender;
|
||
|
|
||
|
type
|
||
|
|
||
|
{
|
||
|
Log appender for an ElasticSearch 6.4+ endpoint
|
||
|
Author: Daniele Teti (https://github.com/danieleteti/) and Salvatore Sparacino
|
||
|
}
|
||
|
|
||
|
TLoggerProElasticSearchAppender = class(TLoggerProRESTAppender)
|
||
|
public
|
||
|
constructor Create(aElasticHost: string; aElasticPort: integer;
|
||
|
aElasticIndex: string); reintroduce;
|
||
|
destructor Destroy; override;
|
||
|
procedure Setup; override;
|
||
|
procedure TearDown; override;
|
||
|
procedure TryToRestart(var Restarted: Boolean); override;
|
||
|
procedure WriteLog(const aLogItem: TLogItem); override;
|
||
|
end;
|
||
|
|
||
|
implementation
|
||
|
|
||
|
uses
|
||
|
System.Json,
|
||
|
System.DateUtils,
|
||
|
System.Classes;
|
||
|
|
||
|
{ TLoggerProElasticSearchAppender }
|
||
|
|
||
|
constructor TLoggerProElasticSearchAppender.Create(aElasticHost: string;
|
||
|
aElasticPort: integer; aElasticIndex: string);
|
||
|
var
|
||
|
lUrl: string;
|
||
|
begin
|
||
|
lUrl := Format('%s:%d/%s/_doc', [aElasticHost, aElasticPort, aElasticIndex.ToLower]);
|
||
|
inherited Create(lUrl, 'application/json');
|
||
|
end;
|
||
|
|
||
|
destructor TLoggerProElasticSearchAppender.Destroy;
|
||
|
begin
|
||
|
inherited;
|
||
|
end;
|
||
|
|
||
|
procedure TLoggerProElasticSearchAppender.Setup;
|
||
|
begin
|
||
|
inherited;
|
||
|
end;
|
||
|
|
||
|
procedure TLoggerProElasticSearchAppender.TearDown;
|
||
|
begin
|
||
|
inherited;
|
||
|
end;
|
||
|
|
||
|
procedure TLoggerProElasticSearchAppender.TryToRestart(var Restarted: Boolean);
|
||
|
begin
|
||
|
inherited;
|
||
|
Restarted := True;
|
||
|
end;
|
||
|
|
||
|
procedure TLoggerProElasticSearchAppender.WriteLog(const aLogItem: TLogItem);
|
||
|
var
|
||
|
lRequestBody: TStringStream;
|
||
|
lJSON: TJSONObject;
|
||
|
begin
|
||
|
lJSON := TJSONObject.Create;
|
||
|
try
|
||
|
lJSON.AddPair('log_tag', TJSONString.Create(aLogItem.LogTag));
|
||
|
lJSON.AddPair('log_level', TJSONString.Create(aLogItem.LogTypeAsString));
|
||
|
lJSON.AddPair('log_message', TJSONString.Create(aLogItem.LogMessage));
|
||
|
lJSON.AddPair('log_datetime', TJSONString.Create(DateToISO8601(aLogItem.TimeStamp)));
|
||
|
lJSON.AddPair('timestamp', TJSONString.Create(DateToISO8601(aLogItem.TimeStamp)));
|
||
|
|
||
|
lRequestBody := TStringStream.Create(lJSON.ToString);
|
||
|
try
|
||
|
InternalWriteLog(GetRESTUrl, aLogItem, lRequestBody);
|
||
|
finally
|
||
|
lRequestBody.Free
|
||
|
end;
|
||
|
finally
|
||
|
lJSON.Free;
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
end.
|