mirror of
https://github.com/danieleteti/delphimvcframework.git
synced 2024-11-15 07:45:54 +01:00
f78fa3744b
# Conflicts: # lib/loggerpro/LoggerPro.ConsoleAppender.pas
116 lines
3.1 KiB
ObjectPascal
116 lines
3.1 KiB
ObjectPascal
// *************************************************************************** }
|
|
//
|
|
// LoggerPro
|
|
//
|
|
// Copyright (c) 2010-2024 Daniele Teti
|
|
//
|
|
// https://github.com/danieleteti/loggerpro
|
|
//
|
|
// ***************************************************************************
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
// ***************************************************************************
|
|
|
|
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.
|