diff --git a/Quick.Logger.Provider.ADODB.pas b/Quick.Logger.Provider.ADODB.pas index 585e888..527362c 100644 --- a/Quick.Logger.Provider.ADODB.pas +++ b/Quick.Logger.Provider.ADODB.pas @@ -38,33 +38,11 @@ interface Data.Win.ADODB, Winapi.ActiveX, Quick.Commons, - Quick.Logger; + Quick.Logger, + Quick.Logger.Provider.BaseDB; type - TFieldsMapping = class - private - fEventDate : string; - fEventType : string; - fMsg : string; - fEnvironment : string; - fPlatformInfo : string; - fOSVersion : string; - fAppName : string; - fUserName : string; - fHost : string; - public - property EventDate : string read fEventDate write fEventDate; - property EventType : string read fEventType write fEventType; - property Msg : string read fMsg write fMsg; - property Environment : string read fEnvironment write fEnvironment; - property PlatformInfo : string read fPlatformInfo write fPlatformInfo; - property OSVersion : string read fOSVersion write fOSVersion; - property AppName : string read fAppName write fAppName; - property UserName : string read fUserName write fUserName; - property Host : string read fHost write fHost; - end; - TDBProvider = (dbMSAccess2000, dbMSAccess2007, dbMSSQL, dbMSSQLnc10, dbMSSQLnc11, dbAS400); const @@ -93,13 +71,12 @@ TDBConfig = class end; {$M-} - TLogADODBProvider = class (TLogProviderBase) + TLogADODBProvider = class (TLogBaseDBProvider) private fDBConnection : TADOConnection; fDBQuery : TADOQuery; fConnectionString : string; fDBConfig : TDBConfig; - fFieldsMapping : TFieldsMapping; function CreateConnectionString : string; function CreateTable : Boolean; procedure AddColumnToTable(const aColumnName, aDataType : string); @@ -109,8 +86,7 @@ TLogADODBProvider = class (TLogProviderBase) constructor Create; override; destructor Destroy; override; property ConnectionString : string read fConnectionString write fConnectionString; - property DBConfig : TDBConfig read fDBConfig write fDBConfig; - property FieldsMapping : TFieldsMapping read fFieldsMapping write fFieldsMapping; + property DBConfig : TDBConfig read fDBConfig ; procedure Init; override; procedure Restart; override; procedure WriteLog(cLogItem : TLogItem); override; @@ -127,16 +103,16 @@ constructor TLogADODBProvider.Create; CoInitialize(nil); LogLevel := LOG_ALL; //set default db fields mapping - fFieldsMapping := TFieldsMapping.Create; - fFieldsMapping.EventDate := 'EventDate'; - fFieldsMapping.EventType := 'EventType'; - fFieldsMapping.Msg := 'Msg'; - fFieldsMapping.Environment := 'Environment'; - fFieldsMapping.PlatformInfo := 'PlaftormInfo'; - fFieldsMapping.OSVersion := 'OSVersion'; - fFieldsMapping.AppName := 'AppName'; - fFieldsMapping.UserName := 'UserName'; - fFieldsMapping.Host := 'Host'; + FieldsMapping.EventDate := 'EventDate'; + FieldsMapping.EventType := 'EventType'; + FieldsMapping.Msg := 'Msg'; + FieldsMapping.Environment := 'Environment'; + FieldsMapping.PlatformInfo := 'PlatformInfo'; + FieldsMapping.OSVersion := 'OSVersion'; + FieldsMapping.AppName := 'AppName'; + FieldsMapping.UserName := 'UserName'; + FieldsMapping.Host := 'Host'; + FieldsMapping.ThreadId := 'ThreadId'; //set default db config fDBConfig := TDBConfig.Create; fDBConfig.Provider := dbMSSQL; @@ -174,18 +150,19 @@ function TLogADODBProvider.CreateTable: Boolean; fDBQuery.SQL.Clear; fDBQuery.SQL.Add('IF NOT EXISTS (SELECT name FROM sys.tables WHERE name = :LOGTABLE)'); fDBQuery.SQL.Add(Format('CREATE TABLE %s (',[fDBConfig.Table])); - fDBQuery.SQL.Add(Format('%s DateTime,',[fFieldsMapping.EventDate])); - fDBQuery.SQL.Add(Format('%s varchar(20),',[fFieldsMapping.EventType])); - fDBQuery.SQL.Add(Format('%s varchar(max));',[fFieldsMapping.Msg])); + fDBQuery.SQL.Add(Format('%s DateTime,',[FieldsMapping.EventDate])); + fDBQuery.SQL.Add(Format('%s varchar(20),',[FieldsMapping.EventType])); + fDBQuery.SQL.Add(Format('%s varchar(max));',[FieldsMapping.Msg])); fDBQuery.Parameters.ParamByName('LOGTABLE').Value := fDBConfig.Table; if fDBQuery.ExecSQL = 0 then raise Exception.Create('Error creating table!'); - if iiEnvironment in IncludedInfo then AddColumnToTable(fFieldsMapping.Environment,'varchar(50)'); - if iiPlatform in IncludedInfo then AddColumnToTable(fFieldsMapping.PlatformInfo,'varchar(50)'); - if iiOSVersion in IncludedInfo then AddColumnToTable(fFieldsMapping.OSVersion,'varchar(70)'); - if iiHost in IncludedInfo then AddColumnToTable(fFieldsMapping.Host,'varchar(20)'); - if iiUserName in IncludedInfo then AddColumnToTable(fFieldsMapping.UserName,'varchar(50)'); - if iiAppName in IncludedInfo then AddColumnToTable(fFieldsMapping.AppName,'varchar(70)'); + if iiEnvironment in IncludedInfo then AddColumnToTable(FieldsMapping.Environment,'varchar(50)'); + if iiPlatform in IncludedInfo then AddColumnToTable(FieldsMapping.PlatformInfo,'varchar(50)'); + if iiOSVersion in IncludedInfo then AddColumnToTable(FieldsMapping.OSVersion,'varchar(70)'); + if iiHost in IncludedInfo then AddColumnToTable(FieldsMapping.Host,'varchar(20)'); + if iiUserName in IncludedInfo then AddColumnToTable(FieldsMapping.UserName,'varchar(50)'); + if iiAppName in IncludedInfo then AddColumnToTable(FieldsMapping.AppName,'varchar(70)'); + if iiThreadId in IncludedInfo then AddColumnToTable(FieldsMapping.ThreadId,'varchar(30)'); Result := True; end; @@ -193,7 +170,6 @@ destructor TLogADODBProvider.Destroy; begin if Assigned(fDBQuery) then fDBQuery.Free; if Assigned(fDBConnection) then fDBConnection.Free; - fFieldsMapping.Free; fDBConfig.Free; CoUninitialize; inherited; @@ -239,16 +215,16 @@ procedure TLogADODBProvider.WriteLog(cLogItem : TLogItem); values : string; begin //prepare fields and values for insert query - fields := fFieldsMapping.EventDate; + fields := FieldsMapping.EventDate; values := Format('''%s''',[DateTimeToStr(cLogItem.EventDate,FormatSettings)]); - AddToQuery(fields,values,fFieldsMapping.EventType,EventTypeName[cLogItem.EventType]); - if iiHost in IncludedInfo then AddToQuery(fields,values,fFieldsMapping.Host,SystemInfo.HostName); - if iiAppName in IncludedInfo then AddToQuery(fields,values,fFieldsMapping.AppName,SystemInfo.AppName); - if iiEnvironment in IncludedInfo then AddToQuery(fields,values,fFieldsMapping.Environment,Environment); - if iiOSVersion in IncludedInfo then AddToQuery(fields,values,fFieldsMapping.OSVersion,SystemInfo.OsVersion); - if iiPlatform in IncludedInfo then AddToQuery(fields,values,fFieldsMapping.PlatformInfo,PlatformInfo); - if iiUserName in IncludedInfo then AddToQuery(fields,values,fFieldsMapping.UserName,SystemInfo.UserName); - AddToQuery(fields,values,fFieldsMapping.Msg,StringReplace(cLogItem.Msg,'''','"',[rfReplaceAll])); + AddToQuery(fields,values,FieldsMapping.EventType,EventTypeName[cLogItem.EventType]); + if iiHost in IncludedInfo then AddToQuery(fields,values,FieldsMapping.Host,SystemInfo.HostName); + if iiAppName in IncludedInfo then AddToQuery(fields,values,FieldsMapping.AppName,SystemInfo.AppName); + if iiEnvironment in IncludedInfo then AddToQuery(fields,values,FieldsMapping.Environment,Environment); + if iiOSVersion in IncludedInfo then AddToQuery(fields,values,FieldsMapping.OSVersion,SystemInfo.OsVersion); + if iiPlatform in IncludedInfo then AddToQuery(fields,values,FieldsMapping.PlatformInfo,PlatformInfo); + if iiUserName in IncludedInfo then AddToQuery(fields,values,FieldsMapping.UserName,SystemInfo.UserName); + AddToQuery(fields,values,FieldsMapping.Msg,StringReplace(cLogItem.Msg,'''','"',[rfReplaceAll])); fDBQuery.SQL.Clear; fDBQuery.SQL.Add(Format('INSERT INTO %s (%s)',[fDBConfig.Table,fields])); diff --git a/Quick.Logger.Provider.BaseDB.pas b/Quick.Logger.Provider.BaseDB.pas new file mode 100644 index 0000000..cfa6929 --- /dev/null +++ b/Quick.Logger.Provider.BaseDB.pas @@ -0,0 +1,91 @@ +{ *************************************************************************** + + Copyright (c) 2023 Jens Fudickar + + Unit : Quick.Logger.Provider.BaseDB + Description : Base classes for all database log providers + Author : Jens Fudickar + Version : 1.0 + + This file is part of QuickLogger: https://github.com/exilon/QuickLogger + + *************************************************************************** + + 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 Quick.Logger.Provider.BaseDB; + +{$i QuickLib.inc} + +interface + +uses + Classes, + SysUtils, + Quick.Logger; + +type + + TLogDbFieldsMapping = class + private + fEventDate : string; + fEventType : string; + fMsg : string; + fEnvironment : string; + fPlatformInfo : string; + fOSVersion : string; + fAppName : string; + fUserName : string; + fHost : string; + FThreadId: string; + public + property EventDate : string read fEventDate write fEventDate; + property EventType : string read fEventType write fEventType; + property Msg : string read fMsg write fMsg; + property Environment : string read fEnvironment write fEnvironment; + property PlatformInfo : string read fPlatformInfo write fPlatformInfo; + property OSVersion : string read fOSVersion write fOSVersion; + property AppName : string read fAppName write fAppName; + property UserName : string read fUserName write fUserName; + property Host : string read fHost write fHost; + property ThreadId: string read FThreadId write FThreadId; + end; + + + TLogBaseDBProvider = class (TLogProviderBase) + private + FFieldsMapping: TLogDbFieldsMapping; + public + constructor Create; override; + destructor Destroy; override; + property FieldsMapping: TLogDbFieldsMapping read FFieldsMapping; + end; + +implementation + +constructor TLogBaseDBProvider.Create; +begin + inherited; + //create default db fields mapping + fFieldsMapping := TLogDbFieldsMapping.Create; +end; + + +destructor TLogBaseDBProvider.Destroy; +begin + fFieldsMapping.Free; + inherited; +end; + +end. diff --git a/Quick.Logger.Provider.Dataset.pas b/Quick.Logger.Provider.Dataset.pas new file mode 100644 index 0000000..feaf050 --- /dev/null +++ b/Quick.Logger.Provider.Dataset.pas @@ -0,0 +1,174 @@ +{ *************************************************************************** + + Copyright (c) 2016-2018 Kike Pérez + + Unit : Quick.Logger.Provider.ADO + Description : Log ADO DB Provider + Author : Kike Pérez + Version : 1.22 + Created : 21/05/2018 + Modified : 26/05/2018 + + This file is part of QuickLogger: https://github.com/exilon/QuickLogger + + *************************************************************************** + + 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 Quick.Logger.Provider.Dataset; + +{$i QuickLib.inc} + +interface + +uses + Classes, + SysUtils, +{$IFDEF MSWINDOWS} + WinApi.Windows, +{$ENDIF} +{$IFDEF DELPHILINUX} + Quick.SyncObjs.Linux.Compatibility, +{$ENDIF} + Quick.Commons, + Quick.Logger, + Quick.Logger.Provider.BaseDB, Data.DB; + +type + + TLogDatasetProvider = class(TLogBaseDBProvider) + private + FLogDataset: TDataset; + CS: TRTLCriticalSection; + protected + procedure AddStringValueToDataset (iFieldName, iFieldValue: string); overload; + procedure AddDateTimeValueToDataset (iFieldName: string; iFieldValue: TDateTime); overload; + procedure AddIntegerValueToDataset (iFieldName: string; iFieldValue: LongInt); overload; + public + constructor Create; override; + destructor Destroy; override; + procedure Init; override; + procedure Restart; override; + procedure WriteLog (cLogItem: TLogItem); override; + property LogDataset: TDataset read FLogDataset write FLogDataset; + end; + +var + GlobalLogDatasetProvider: TLogDatasetProvider; + +implementation + +constructor TLogDatasetProvider.Create; +begin + inherited; +{$IF Defined(MSWINDOWS) OR Defined(DELPHILINUX)} + InitializeCriticalSection (CS); +{$ELSE} + InitCriticalSection (CS); +{$ENDIF} +end; + +destructor TLogDatasetProvider.Destroy; +begin +{$IF Defined(MSWINDOWS) OR Defined(DELPHILINUX)} + DeleteCriticalSection (CS); +{$ELSE} + DoneCriticalsection (CS); +{$ENDIF} + inherited; +end; + +procedure TLogDatasetProvider.AddStringValueToDataset (iFieldName, iFieldValue: string); +var + Field: TField; +begin + Field := LogDataset.FindField (iFieldName); + if Assigned (Field) then + if Field.Size > 0 then + Field.AsString := iFieldValue.Substring (0, Field.Size - 1) + else + Field.AsString := iFieldValue; +end; + +procedure TLogDatasetProvider.AddDateTimeValueToDataset (iFieldName: string; iFieldValue: TDateTime); +var + Field: TField; +begin + Field := LogDataset.FindField (iFieldName); + if Assigned (Field) then + Field.AsDateTime := iFieldValue; +end; + +procedure TLogDatasetProvider.AddIntegerValueToDataset (iFieldName: string; iFieldValue: LongInt); +var + Field: TField; +begin + Field := LogDataset.FindField (iFieldName); + if Assigned (Field) then + Field.AsInteger := iFieldValue; +end; + +procedure TLogDatasetProvider.Init; +begin + inherited; +end; + +procedure TLogDatasetProvider.Restart; +begin + Stop; + Init; +end; + +procedure TLogDatasetProvider.WriteLog (cLogItem: TLogItem); +begin + EnterCriticalSection (CS); + try + if not Assigned (LogDataset) or not LogDataset.Active then + Exit; + LogDataset.Insert; + // prepare fields and values for insert query + AddDateTimeValueToDataset (FieldsMapping.EventDate, cLogItem.EventDate); + AddStringValueToDataset (FieldsMapping.EventType, cLogItem.EventTypeName); + AddStringValueToDataset (FieldsMapping.Msg, cLogItem.Msg); + if iiHost in IncludedInfo then + AddStringValueToDataset (FieldsMapping.Host, SystemInfo.HostName); + if iiAppName in IncludedInfo then + AddStringValueToDataset (FieldsMapping.AppName, SystemInfo.AppName); + if iiEnvironment in IncludedInfo then + AddStringValueToDataset (FieldsMapping.Environment, Environment); + if iiOSVersion in IncludedInfo then + AddStringValueToDataset (FieldsMapping.OSVersion, SystemInfo.OSVersion); + if iiPlatform in IncludedInfo then + AddStringValueToDataset (FieldsMapping.PlatformInfo, PlatformInfo); + if iiUserName in IncludedInfo then + AddStringValueToDataset (FieldsMapping.UserName, SystemInfo.UserName); + if iiThreadId in IncludedInfo then + AddIntegerValueToDataset (FieldsMapping.ThreadId, cLogItem.ThreadId); + LogDataset.Post; + finally + EnterCriticalSection (CS); + end; + +end; + +initialization + +GlobalLogDatasetProvider := TLogDatasetProvider.Create; + +finalization + +if Assigned (GlobalLogDatasetProvider) and (GlobalLogDatasetProvider.RefCount = 0) then + GlobalLogDatasetProvider.Free; + +end. diff --git a/samples/delphi/Vcl/Main.dfm b/samples/delphi/Vcl/Main.dfm new file mode 100644 index 0000000..ffdc736 --- /dev/null +++ b/samples/delphi/Vcl/Main.dfm @@ -0,0 +1,165 @@ +object Form1: TForm1 + Left = 0 + Top = 0 + Caption = 'Log Sample Form' + ClientHeight = 776 + ClientWidth = 1166 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Segoe UI' + Font.Style = [] + OnShow = FormShow + TextHeight = 15 + object ButtonPanel: TPanel + Left = 0 + Top = 0 + Width = 1166 + Height = 41 + Align = alTop + TabOrder = 0 + object ClearButton: TButton + Left = 16 + Top = 10 + Width = 75 + Height = 25 + Caption = '&Clear' + TabOrder = 0 + OnClick = ClearButtonClick + end + object AddSimpleButton: TButton + Left = 111 + Top = 10 + Width = 75 + Height = 25 + Caption = 'Add &Simple' + TabOrder = 1 + OnClick = AddSimpleButtonClick + end + object AddLoopButton: TButton + Left = 200 + Top = 10 + Width = 75 + Height = 25 + Caption = 'Add &Loop' + TabOrder = 2 + OnClick = AddLoopButtonClick + end + end + object Panel2: TPanel + Left = 0 + Top = 413 + Width = 1166 + Height = 363 + Align = alClient + TabOrder = 1 + object LogDBGrid: TDBGrid + Left = 1 + Top = 1 + Width = 1164 + Height = 361 + Align = alClient + DataSource = LogDataSource + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Courier New' + Font.Style = [] + ParentFont = False + ReadOnly = True + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -12 + TitleFont.Name = 'Segoe UI' + TitleFont.Style = [] + end + end + object Panel3: TPanel + Left = 0 + Top = 41 + Width = 1166 + Height = 372 + Align = alTop + Anchors = [akLeft, akTop, akRight, akBottom] + TabOrder = 2 + object LogMemo: TMemo + Left = 1 + Top = 1 + Width = 1164 + Height = 370 + Align = alClient + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Courier New' + Font.Style = [] + ParentFont = False + ReadOnly = True + ScrollBars = ssBoth + TabOrder = 0 + end + end + object LogDataSource: TDataSource + DataSet = LogClientDataSet + Left = 552 + Top = 528 + end + object LogClientDataSet: TClientDataSet + Aggregates = <> + FieldDefs = <> + IndexDefs = <> + Params = <> + StoreDefs = True + Left = 304 + Top = 536 + object LogClientDataSetEventDate: TStringField + FieldName = 'EventDate' + Size = 30 + end + object LogClientDataSetEventType: TStringField + DisplayWidth = 9 + FieldName = 'EventType' + end + object LogClientDataSetMsg: TStringField + DisplayWidth = 31 + FieldName = 'Msg' + Size = 10000 + end + object LogClientDataSetThreadId: TLargeintField + DisplayWidth = 15 + FieldName = 'ThreadId' + end + object LogClientDataSetEnvironment: TStringField + DisplayWidth = 30 + FieldName = 'Environment' + Size = 100 + end + object LogClientDataSetPlatformInfo: TStringField + DisplayWidth = 15 + FieldName = 'PlatformInfo' + Size = 100 + end + object LogClientDataSetOSVersion: TStringField + DisplayWidth = 20 + FieldName = 'OSVersion' + Size = 100 + end + object LogClientDataSetAppName: TStringField + DisplayWidth = 20 + FieldName = 'AppName' + Size = 100 + end + object LogClientDataSetUserName: TStringField + DisplayWidth = 15 + FieldName = 'UserName' + Size = 100 + end + object LogClientDataSetHost: TStringField + DisplayWidth = 7 + FieldName = 'Host' + Size = 100 + end + end +end diff --git a/samples/delphi/Vcl/Main.pas b/samples/delphi/Vcl/Main.pas new file mode 100644 index 0000000..e6a5683 --- /dev/null +++ b/samples/delphi/Vcl/Main.pas @@ -0,0 +1,142 @@ +unit Main; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Datasnap.DBClient, Vcl.Grids, Vcl.DBGrids, Vcl.StdCtrls, Vcl.ExtCtrls, + Quick.Logger.Provider.StringList, Quick.Logger.Provider.BaseDB, Quick.Logger.Provider.Dataset; + +type + TForm1 = class(TForm) + ButtonPanel: TPanel; + Panel2: TPanel; + Panel3: TPanel; + LogMemo: TMemo; + LogDBGrid: TDBGrid; + LogDataSource: TDataSource; + LogClientDataSet: TClientDataSet; + ClearButton: TButton; + AddSimpleButton: TButton; + AddLoopButton: TButton; + LogClientDataSetEventType: TStringField; + LogClientDataSetMsg: TStringField; + LogClientDataSetEnvironment: TStringField; + LogClientDataSetPlatformInfo: TStringField; + LogClientDataSetOSVersion: TStringField; + LogClientDataSetAppName: TStringField; + LogClientDataSetUserName: TStringField; + LogClientDataSetHost: TStringField; + LogClientDataSetThreadId: TLargeintField; + LogClientDataSetEventDate: TStringField; + procedure AddLoopButtonClick (Sender: TObject); + procedure AddSimpleButtonClick (Sender: TObject); + procedure ClearButtonClick (Sender: TObject); + procedure FormShow (Sender: TObject); + private + procedure AddSimpleLog; + procedure ClearLogs; + { Private declarations } + public + procedure AddLoopLog; + procedure InitLogProvider; + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +uses + Quick.Logger, Quick.Logger.Provider.ADODB; + +{$R *.dfm} + +procedure TForm1.AddLoopButtonClick (Sender: TObject); +begin + AddLoopLog; +end; + +procedure TForm1.AddLoopLog; +var + i: Integer; +begin + for i := 1 to 20 do + begin + Logger.Info ('Hello world %d!', [i]); + Logger.Error ('An error msg %d!', [i]); + Logger.Warn ('A warning msg %d!', [i]); + Logger.Critical ('A critical error %d!', [i]); + Logger.Succ ('Successfully process %d', [i]); + end; +end; + +procedure TForm1.AddSimpleButtonClick (Sender: TObject); +begin + AddSimpleLog; +end; + +procedure TForm1.ClearButtonClick (Sender: TObject); +begin + ClearLogs; +end; + +procedure TForm1.FormShow (Sender: TObject); +begin + InitLogProvider; + ClearLogs; + AddSimpleLog; +end; + +procedure TForm1.InitLogProvider; +begin + GlobalLogStringListProvider.LogList := LogMemo.Lines; + GlobalLogStringListProvider.Enabled := true; + GlobalLogStringListProvider.CustomMsgOutput := true; + GlobalLogStringListProvider.CustomFormatOutput := '%{DATETIME} - [%{LEVEL}] : %{MESSAGE}'; + GlobalLogStringListProvider.TimePrecission := true; + GlobalLogStringListProvider.IncludedInfo := [iiAppName, iiHost, iiUserName, iiEnvironment, iiPlatform, iiOSVersion, + iiExceptionInfo, iiExceptionStackTrace, iiThreadId]; + GlobalLogStringListProvider.LogLevel := LOG_ALL; + Logger.Providers.Add (GlobalLogStringListProvider); + + GlobalLogDatasetProvider.IncludedInfo := + [iiThreadId , iiAppName, iiHost, iiUserName, iiEnvironment, iiPlatform, iiOSVersion, iiExceptionInfo,iiExceptionStackTrace ]; + GlobalLogDatasetProvider.Enabled := true; + GlobalLogDatasetProvider.LogLevel := LOG_ALL; + GlobalLogDatasetProvider.TimePrecission := False; + GlobalLogDatasetProvider.FieldsMapping.EventDate := 'EventDate'; + GlobalLogDatasetProvider.FieldsMapping.EventType := 'EventType'; + GlobalLogDatasetProvider.FieldsMapping.Msg := 'Msg'; + GlobalLogDatasetProvider.FieldsMapping.Environment := 'Environment'; + GlobalLogDatasetProvider.FieldsMapping.PlatformInfo := 'PlatformInfo'; + GlobalLogDatasetProvider.FieldsMapping.OSVersion := 'OSVersion'; + GlobalLogDatasetProvider.FieldsMapping.AppName := 'AppName'; + GlobalLogDatasetProvider.FieldsMapping.UserName := 'UserName'; + GlobalLogDatasetProvider.FieldsMapping.Host := 'Host'; + GlobalLogDatasetProvider.FieldsMapping.ThreadId := 'ThreadId'; + GlobalLogDatasetProvider.LogDataset := LogClientDataSet; + Logger.Providers.Add (GlobalLogDatasetProvider); + if not LogClientDataSet.Active then + LogClientDataSet.CreateDataSet; +end; + +procedure TForm1.ClearLogs; +begin + LogMemo.Clear; + LogClientDataSet.Close; + LogClientDataSet.Open; + Log ('Quick.Logger Demo 1 [Event types]', etHeader); +end; + +procedure TForm1.AddSimpleLog; +begin + Logger.Info ('Hello world!'); + Logger.Error ('An error msg!'); + Logger.Warn ('A warning msg!'); + Logger.Critical ('A critical error!'); + Logger.Succ ('Successfully process'); +end; + +end. diff --git a/samples/delphi/Vcl/Vcl.dpr b/samples/delphi/Vcl/Vcl.dpr new file mode 100644 index 0000000..62d6272 --- /dev/null +++ b/samples/delphi/Vcl/Vcl.dpr @@ -0,0 +1,14 @@ +program Vcl; + +uses + Vcl.Forms, + Main in 'Main.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/samples/delphi/Vcl/Vcl.res b/samples/delphi/Vcl/Vcl.res new file mode 100644 index 0000000..1ad2735 Binary files /dev/null and b/samples/delphi/Vcl/Vcl.res differ