mirror of
https://github.com/danieleteti/delphimvcframework.git
synced 2024-11-15 07:45:54 +01:00
Added TLogWriterDecorator; removed deprecated *fmt methods from ILogWriter
This commit is contained in:
parent
0c80ec022d
commit
fe555912a5
@ -39,6 +39,47 @@ type
|
||||
class function Build(Appender: ILogAppender; Filter: TFunc<TLogItem, boolean>): ILogAppender;
|
||||
end;
|
||||
|
||||
TLogWriterPredicate = reference to function (const aType: TLogType; const aMessage, aTag: string): Boolean;
|
||||
|
||||
TLogWriterDecorator = class(TInterfacedObject, ILogWriter)
|
||||
private
|
||||
fDecoratedLogWriter: ILogWriter;
|
||||
fFilter: TLogWriterPredicate;
|
||||
protected
|
||||
{ ILogWriter }
|
||||
procedure Debug(const aMessage: string; const aTag: string); overload;
|
||||
procedure Debug(const aMessage: string; const aParams: array of TVarRec; const aTag: string); overload;
|
||||
|
||||
procedure Info(const aMessage: string; const aTag: string); overload;
|
||||
procedure Info(const aMessage: string; const aParams: array of TVarRec; const aTag: string); overload;
|
||||
|
||||
procedure Warn(const aMessage: string; const aTag: string); overload;
|
||||
procedure Warn(const aMessage: string; const aParams: array of TVarRec; const aTag: string); overload;
|
||||
|
||||
procedure Error(const aMessage: string; const aTag: string); overload;
|
||||
procedure Error(const aMessage: string; const aParams: array of TVarRec; const aTag: string); overload;
|
||||
|
||||
procedure Fatal(const aMessage: string; const aTag: string); overload;
|
||||
procedure Fatal(const aMessage: string; const aParams: array of TVarRec; const aTag: string); overload;
|
||||
|
||||
procedure Log(const aType: TLogType; const aMessage: string; const aTag: string); overload;
|
||||
procedure Log(const aType: TLogType; const aMessage: string; const aParams: array of const; const aTag: string); overload;
|
||||
|
||||
{ ICustomLogWriter}
|
||||
function GetAppendersClassNames: TArray<string>;
|
||||
function GetAppenders(const aIndex: Integer): ILogAppender;
|
||||
property Appenders[const aIndex: Integer]: ILogAppender read GetAppenders;
|
||||
procedure AddAppender(const aAppender: ILogAppender);
|
||||
procedure DelAppender(const aAppender: ILogAppender);
|
||||
function AppendersCount(): Integer;
|
||||
|
||||
|
||||
///
|
||||
constructor Create(LogWriter: ILogWriter; Filter: TLogWriterPredicate);
|
||||
public
|
||||
class function Build(LogWriter: ILogWriter; Filter: TLogWriterPredicate): ILogWriter;
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
@ -91,7 +132,114 @@ end;
|
||||
class function TLoggerProFilter.Build(Appender: ILogAppender;
|
||||
Filter: TFunc<TLogItem, boolean>): ILogAppender;
|
||||
begin
|
||||
result := TLoggerProAppenderFilterImpl.Create(Appender, Filter);
|
||||
Result := TLoggerProAppenderFilterImpl.Create(Appender, Filter);
|
||||
end;
|
||||
|
||||
|
||||
{ TLogWriterDecorator }
|
||||
|
||||
class function TLogWriterDecorator.Build(LogWriter: ILogWriter;
|
||||
Filter: TLogWriterPredicate): ILogWriter;
|
||||
begin
|
||||
Result := TLogWriterDecorator.Create(LogWriter, Filter);
|
||||
end;
|
||||
|
||||
constructor TLogWriterDecorator.Create(LogWriter: ILogWriter; Filter: TLogWriterPredicate);
|
||||
begin
|
||||
inherited Create;
|
||||
fDecoratedLogWriter := LogWriter;
|
||||
fFilter := Filter;
|
||||
end;
|
||||
|
||||
procedure TLogWriterDecorator.AddAppender(const aAppender: ILogAppender);
|
||||
begin
|
||||
fDecoratedLogWriter.AddAppender(aAppender);
|
||||
end;
|
||||
|
||||
function TLogWriterDecorator.AppendersCount: Integer;
|
||||
begin
|
||||
Result := fDecoratedLogWriter.AppendersCount;
|
||||
end;
|
||||
|
||||
function TLogWriterDecorator.GetAppenders(const aIndex: Integer): ILogAppender;
|
||||
begin
|
||||
Result := fDecoratedLogWriter.GetAppenders(aIndex);
|
||||
end;
|
||||
|
||||
function TLogWriterDecorator.GetAppendersClassNames: TArray<string>;
|
||||
begin
|
||||
Result := fDecoratedLogWriter.GetAppendersClassNames;
|
||||
end;
|
||||
|
||||
// ILogWriter
|
||||
|
||||
procedure TLogWriterDecorator.Debug(const aMessage, aTag: string);
|
||||
begin
|
||||
Log(TLogType.Debug, aMessage, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriterDecorator.Debug(const aMessage: string; const aParams: array of TVarRec; const aTag: string);
|
||||
begin
|
||||
Log(TLogType.Debug, aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriterDecorator.DelAppender(const aAppender: ILogAppender);
|
||||
begin
|
||||
fDecoratedLogWriter.DelAppender(aAppender);
|
||||
end;
|
||||
|
||||
procedure TLogWriterDecorator.Error(const aMessage, aTag: string);
|
||||
begin
|
||||
Log(TLogType.Error, aMessage, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriterDecorator.Error(const aMessage: string; const aParams: array of TVarRec; const aTag: string);
|
||||
begin
|
||||
Log(TLogType.Error, aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriterDecorator.Fatal(const aMessage, aTag: string);
|
||||
begin
|
||||
Log(TLogType.Fatal, aMessage, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriterDecorator.Fatal(const aMessage: string;
|
||||
const aParams: array of TVarRec; const aTag: string);
|
||||
begin
|
||||
Log(TLogType.Fatal, aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriterDecorator.Info(const aMessage, aTag: string);
|
||||
begin
|
||||
Log(TLogType.Info, aMessage, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriterDecorator.Info(const aMessage: string; const aParams: array of TVarRec; const aTag: string);
|
||||
begin
|
||||
Log(TLogType.Info, aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriterDecorator.Log(const aType: TLogType; const aMessage, aTag: string);
|
||||
begin
|
||||
if fFilter(aType, aMessage, aTag) then
|
||||
begin
|
||||
fDecoratedLogWriter.Log(aType, aMessage, aTag);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TLogWriterDecorator.Log(const aType: TLogType; const aMessage: string; const aParams: array of const; const aTag: string);
|
||||
begin
|
||||
Log(aType, Format(aMessage, aParams), aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriterDecorator.Warn(const aMessage, aTag: string);
|
||||
begin
|
||||
Log(TLogType.Warning, aMessage, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriterDecorator.Warn(const aMessage: string; const aParams: array of TVarRec; const aTag: string);
|
||||
begin
|
||||
Log(TLogType.Warning, aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
|
||||
|
@ -153,27 +153,21 @@ type
|
||||
['{A717A040-4493-458F-91B2-6F6E2AFB496F}']
|
||||
procedure Debug(const aMessage: string; const aTag: string); overload;
|
||||
procedure Debug(const aMessage: string; const aParams: array of TVarRec; const aTag: string); overload;
|
||||
procedure DebugFmt(const aMessage: string; const aParams: array of TVarRec; const aTag: string); deprecated;
|
||||
|
||||
procedure Info(const aMessage: string; const aTag: string); overload;
|
||||
procedure Info(const aMessage: string; const aParams: array of TVarRec; const aTag: string); overload;
|
||||
procedure InfoFmt(const aMessage: string; const aParams: array of TVarRec; const aTag: string); deprecated;
|
||||
|
||||
procedure Warn(const aMessage: string; const aTag: string); overload;
|
||||
procedure Warn(const aMessage: string; const aParams: array of TVarRec; const aTag: string); overload;
|
||||
procedure WarnFmt(const aMessage: string; const aParams: array of TVarRec; const aTag: string); deprecated;
|
||||
|
||||
procedure Error(const aMessage: string; const aTag: string); overload;
|
||||
procedure Error(const aMessage: string; const aParams: array of TVarRec; const aTag: string); overload;
|
||||
procedure ErrorFmt(const aMessage: string; const aParams: array of TVarRec; const aTag: string); deprecated;
|
||||
|
||||
procedure Fatal(const aMessage: string; const aTag: string); overload;
|
||||
procedure Fatal(const aMessage: string; const aParams: array of TVarRec; const aTag: string); overload;
|
||||
procedure FatalFmt(const aMessage: string; const aParams: array of TVarRec; const aTag: string); deprecated;
|
||||
|
||||
procedure Log(const aType: TLogType; const aMessage: string; const aTag: string); overload;
|
||||
procedure Log(const aType: TLogType; const aMessage: string; const aParams: array of const; const aTag: string); overload;
|
||||
procedure LogFmt(const aType: TLogType; const aMessage: string; const aParams: array of const; const aTag: string); deprecated;
|
||||
end;
|
||||
|
||||
TLogAppenderList = TList<ILogAppender>;
|
||||
@ -268,27 +262,20 @@ type
|
||||
public
|
||||
procedure Debug(const aMessage: string; const aTag: string); overload;
|
||||
procedure Debug(const aMessage: string; const aParams: array of TVarRec; const aTag: string); overload;
|
||||
procedure DebugFmt(const aMessage: string; const aParams: array of TVarRec; const aTag: string);
|
||||
|
||||
procedure Info(const aMessage: string; const aTag: string); overload;
|
||||
procedure Info(const aMessage: string; const aParams: array of TVarRec; const aTag: string); overload;
|
||||
procedure InfoFmt(const aMessage: string; const aParams: array of TVarRec; const aTag: string);
|
||||
|
||||
procedure Warn(const aMessage: string; const aTag: string); overload;
|
||||
procedure Warn(const aMessage: string; const aParams: array of TVarRec; const aTag: string); overload;
|
||||
procedure WarnFmt(const aMessage: string; const aParams: array of TVarRec; const aTag: string);
|
||||
|
||||
procedure Error(const aMessage: string; const aTag: string); overload;
|
||||
procedure Error(const aMessage: string; const aParams: array of TVarRec; const aTag: string); overload;
|
||||
procedure ErrorFmt(const aMessage: string; const aParams: array of TVarRec; const aTag: string);
|
||||
|
||||
procedure Fatal(const aMessage: string; const aTag: string); overload;
|
||||
procedure Fatal(const aMessage: string; const aParams: array of TVarRec; const aTag: string); overload;
|
||||
procedure FatalFmt(const aMessage: string; const aParams: array of TVarRec; const aTag: string);
|
||||
|
||||
|
||||
procedure Log(const aType: TLogType; const aMessage: string; const aParams: array of const; const aTag: string); overload;
|
||||
procedure LogFmt(const aType: TLogType; const aMessage: string; const aParams: array of const; const aTag: string);
|
||||
end;
|
||||
|
||||
TOnAppenderLogRow = reference to procedure(const LogItem: TLogItem; out LogRow: string);
|
||||
@ -640,11 +627,6 @@ begin
|
||||
Log(TLogType.Debug, aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriter.DebugFmt(const aMessage: string; const aParams: array of TVarRec; const aTag: string);
|
||||
begin
|
||||
Debug(aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriter.Error(const aMessage, aTag: string);
|
||||
begin
|
||||
Log(TLogType.Error, aMessage, aTag);
|
||||
@ -655,11 +637,6 @@ begin
|
||||
Log(TLogType.Error, aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriter.ErrorFmt(const aMessage: string; const aParams: array of TVarRec; const aTag: string);
|
||||
begin
|
||||
Error(aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriter.Fatal(const aMessage, aTag: string);
|
||||
begin
|
||||
Log(TLogType.Fatal, aMessage, aTag);
|
||||
@ -671,12 +648,6 @@ begin
|
||||
Log(TLogType.Fatal, aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriter.FatalFmt(const aMessage: string;
|
||||
const aParams: array of TVarRec; const aTag: string);
|
||||
begin
|
||||
Fatal(aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriter.Info(const aMessage, aTag: string);
|
||||
begin
|
||||
Log(TLogType.Info, aMessage, aTag);
|
||||
@ -687,22 +658,11 @@ begin
|
||||
Log(TLogType.Info, aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriter.InfoFmt(const aMessage: string; const aParams: array of TVarRec; const aTag: string);
|
||||
begin
|
||||
Info(aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriter.Log(const aType: TLogType; const aMessage: string; const aParams: array of const; const aTag: string);
|
||||
begin
|
||||
Log(aType, Format(aMessage, aParams), aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriter.LogFmt(const aType: TLogType; const aMessage: string; const aParams: array of const; const aTag: string);
|
||||
begin
|
||||
Log(aType, aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
|
||||
procedure TLogWriter.Warn(const aMessage, aTag: string);
|
||||
begin
|
||||
Log(TLogType.Warning, aMessage, aTag);
|
||||
@ -713,11 +673,6 @@ begin
|
||||
Log(TLogType.Warning, aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
procedure TLogWriter.WarnFmt(const aMessage: string; const aParams: array of TVarRec; const aTag: string);
|
||||
begin
|
||||
Warn(aMessage, aParams, aTag);
|
||||
end;
|
||||
|
||||
{ TLogger.TLogItem }
|
||||
|
||||
function TLogItem.Clone: TLogItem;
|
||||
|
@ -6,6 +6,7 @@ program CustomLoggerSample;
|
||||
uses
|
||||
System.SysUtils,
|
||||
MVCFramework.Logger,
|
||||
LoggerPro.Proxy,
|
||||
|
||||
{$IFDEF MSWINDOWS}
|
||||
|
||||
@ -19,7 +20,7 @@ uses
|
||||
IdHTTPWebBrokerBridge,
|
||||
MyControllerU in 'MyControllerU.pas',
|
||||
WebModuleU in 'WebModuleU.pas' {MyWebModule: TWebModule} ,
|
||||
CustomLoggerConfigU in 'CustomLoggerConfigU.pas';
|
||||
CustomLoggerConfigU in 'CustomLoggerConfigU.pas', LoggerPro;
|
||||
|
||||
{$R *.res}
|
||||
|
||||
@ -51,7 +52,24 @@ begin
|
||||
end;
|
||||
|
||||
begin
|
||||
SetDefaultLogger(GetLogger);
|
||||
//Option 1
|
||||
//You can customize the logger providing a complete new one
|
||||
//SetDefaultLogger(GetLogger);
|
||||
|
||||
|
||||
|
||||
//Option 2
|
||||
//If you want to sligthly change the behaviour of the default logger
|
||||
//you can retrive the "default configuration" and then apply a decorator
|
||||
//with a filter function which "decides" if the logitem must be go through
|
||||
//the appenders chain or not (so, discarded)
|
||||
SetDefaultLogger(TLogWriterDecorator.Build(CreateLoggerWithDefaultConfiguration,
|
||||
function (const aType: TLogType; const aMessage, aTag: string): Boolean
|
||||
begin
|
||||
Result := True;
|
||||
end));
|
||||
|
||||
|
||||
ReportMemoryLeaksOnShutdown := True;
|
||||
try
|
||||
if WebRequestHandler <> nil then
|
||||
|
@ -24,6 +24,26 @@
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='iOSDevice64' and '$(Base)'=='true') or '$(Base_iOSDevice64)'!=''">
|
||||
<Base_iOSDevice64>true</Base_iOSDevice64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='iOSSimARM64' and '$(Base)'=='true') or '$(Base_iOSSimARM64)'!=''">
|
||||
<Base_iOSSimARM64>true</Base_iOSSimARM64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='OSX64' and '$(Base)'=='true') or '$(Base_OSX64)'!=''">
|
||||
<Base_OSX64>true</Base_OSX64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='OSXARM64' and '$(Base)'=='true') or '$(Base_OSXARM64)'!=''">
|
||||
<Base_OSXARM64>true</Base_OSXARM64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||
<Base_Win32>true</Base_Win32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
@ -80,6 +100,26 @@
|
||||
<BT_BuildType>Debug</BT_BuildType>
|
||||
<EnabledSysJars>activity-1.1.0.dex.jar;annotation-1.2.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;biometric-1.1.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.1.0.dex.jar;core-runtime-2.1.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.2.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.2.0.dex.jar;lifecycle-runtime-2.2.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.2.0.dex.jar;lifecycle-viewmodel-savedstate-2.2.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;savedstate-1.0.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.0.dex.jar</EnabledSysJars>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_iOSDevice64)'!=''">
|
||||
<VerInfo_Keys>CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers</VerInfo_Keys>
|
||||
<VerInfo_UIDeviceFamily>iPhoneAndiPad</VerInfo_UIDeviceFamily>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<BT_BuildType>Debug</BT_BuildType>
|
||||
<VerInfo_BundleId>$(MSBuildProjectName)</VerInfo_BundleId>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_iOSSimARM64)'!=''">
|
||||
<VerInfo_Keys>CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers</VerInfo_Keys>
|
||||
<VerInfo_UIDeviceFamily>iPhoneAndiPad</VerInfo_UIDeviceFamily>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_OSX64)'!=''">
|
||||
<VerInfo_Keys>CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface</VerInfo_Keys>
|
||||
<BT_BuildType>Debug</BT_BuildType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_OSXARM64)'!=''">
|
||||
<VerInfo_Keys>CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface</VerInfo_Keys>
|
||||
<BT_BuildType>Debug</BT_BuildType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||
@ -1027,7 +1067,11 @@
|
||||
<Platforms>
|
||||
<Platform value="Android">False</Platform>
|
||||
<Platform value="Android64">False</Platform>
|
||||
<Platform value="iOSDevice64">False</Platform>
|
||||
<Platform value="iOSSimARM64">False</Platform>
|
||||
<Platform value="Linux64">True</Platform>
|
||||
<Platform value="OSX64">False</Platform>
|
||||
<Platform value="OSXARM64">False</Platform>
|
||||
<Platform value="Win32">True</Platform>
|
||||
<Platform value="Win64">False</Platform>
|
||||
</Platforms>
|
||||
|
@ -95,7 +95,9 @@ procedure LogExitMethod(const AMethodName: string);
|
||||
function Log: ILogWriter; overload;
|
||||
|
||||
procedure SetDefaultLogger(const aLogWriter: ILogWriter);
|
||||
procedure InitializeDefaultLogger;
|
||||
//procedure InitializeDefaultLogger;
|
||||
function CreateLoggerWithDefaultConfiguration: ILogWriter;
|
||||
|
||||
{ @abstract(Use only inside DLL because dll unloading is not a safe place to shutdown threads, so call this before unload DLL)
|
||||
Use this also in ISAPI dll. Check the @code(loggerproisapisample.dll) sample
|
||||
}
|
||||
@ -277,6 +279,16 @@ begin
|
||||
LogW(ObjectToJSON(AObject));
|
||||
end;
|
||||
|
||||
procedure InitializeDefaultLogger;
|
||||
begin
|
||||
{ This procedure must be called in a synchronized context
|
||||
(Normally only SetDefaultLogger should be the caller) }
|
||||
if not Assigned(gDefaultLogger) then
|
||||
begin
|
||||
gDefaultLogger := CreateLoggerWithDefaultconfiguration;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure SetDefaultLogger(const aLogWriter: ILogWriter);
|
||||
begin
|
||||
if gDefaultLogger = nil then
|
||||
@ -302,43 +314,36 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
|
||||
procedure InitializeDefaultLogger;
|
||||
function CreateLoggerWithDefaultConfiguration: ILogWriter;
|
||||
var
|
||||
lLogsFolder: String;
|
||||
lFileAppender, lConsoleAppender: ILogAppender;
|
||||
lAppenders: TArray<ILogAppender>;
|
||||
begin
|
||||
{ This procedure must be called in a synchronized context
|
||||
(Normally only SetDefaultLogger should be the caller) }
|
||||
if not Assigned(gDefaultLogger) then
|
||||
begin
|
||||
{$IF NOT DEFINED(MOBILE)}
|
||||
lLogsFolder := AppPath + 'logs';
|
||||
lLogsFolder := AppPath + 'logs';
|
||||
{$ELSE}
|
||||
lLogsFolder := TPath.Combine(TPath.GetDocumentsPath, 'logs');
|
||||
lLogsFolder := TPath.Combine(TPath.GetDocumentsPath, 'logs');
|
||||
{$ENDIF}
|
||||
lFileAppender := TLoggerProFileAppender.Create(5, 10000, lLogsFolder);
|
||||
if IsConsole and UseConsoleLogger then
|
||||
begin
|
||||
{$IF Defined(MSWINDOWS)}
|
||||
lConsoleAppender := TLoggerProConsoleAppender.Create(TLogItemRendererNoTag.Create);
|
||||
{$ELSE}
|
||||
{$IF Not Defined(MOBILE)}
|
||||
lConsoleAppender := TLoggerProSimpleConsoleAppender.Create(TLogItemRendererNoTag.Create);
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
lAppenders := [lFileAppender, lConsoleAppender];
|
||||
end
|
||||
else
|
||||
begin
|
||||
lAppenders := [lFileAppender];
|
||||
end;
|
||||
gDefaultLogger := BuildLogWriter(lAppenders);
|
||||
end;
|
||||
lFileAppender := TLoggerProFileAppender.Create(5, 10000, lLogsFolder);
|
||||
if IsConsole and UseConsoleLogger then
|
||||
begin
|
||||
{$IF Defined(MSWINDOWS)}
|
||||
lConsoleAppender := TLoggerProConsoleAppender.Create(TLogItemRendererNoTag.Create);
|
||||
{$ELSE}
|
||||
{$IF Not Defined(MOBILE)}
|
||||
lConsoleAppender := TLoggerProSimpleConsoleAppender.Create(TLogItemRendererNoTag.Create);
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
lAppenders := [lFileAppender, lConsoleAppender];
|
||||
end
|
||||
else
|
||||
begin
|
||||
lAppenders := [lFileAppender];
|
||||
end;
|
||||
Result := BuildLogWriter(lAppenders);
|
||||
end;
|
||||
|
||||
|
||||
procedure ReleaseGlobalLogger;
|
||||
begin
|
||||
if gDefaultLogger <> nil then
|
||||
|
@ -2772,7 +2772,7 @@ begin
|
||||
except
|
||||
on Ex: Exception do
|
||||
begin
|
||||
Log.ErrorFmt('[%s] %s [PathInfo "%s"] (Custom message: "%s")',
|
||||
Log.Error('[%s] %s [PathInfo "%s"] (Custom message: "%s")',
|
||||
[Ex.Classname, Ex.Message, GetRequestShortDescription(ARequest), 'Cannot create controller'], LOGGERPRO_TAG);
|
||||
raise EMVCException.Create(http_status.InternalServerError,
|
||||
'Cannot create controller (see log for more info)');
|
||||
@ -2958,7 +2958,7 @@ begin
|
||||
begin
|
||||
if not CustomExceptionHandling(ESess, lSelectedController, lContext) then
|
||||
begin
|
||||
Log.ErrorFmt('[%s] %s [PathInfo "%s"] - %d %s (Custom message: "%s")',
|
||||
Log.Error('[%s] %s [PathInfo "%s"] - %d %s (Custom message: "%s")',
|
||||
[
|
||||
ESess.Classname,
|
||||
ESess.Message,
|
||||
@ -2976,7 +2976,7 @@ begin
|
||||
begin
|
||||
if not CustomExceptionHandling(E, lSelectedController, lContext) then
|
||||
begin
|
||||
Log.ErrorFmt('[%s] %s [PathInfo "%s"] - %d %s (Custom message: "%s")',
|
||||
Log.Error('[%s] %s [PathInfo "%s"] - %d %s (Custom message: "%s")',
|
||||
[
|
||||
E.Classname,
|
||||
E.Message,
|
||||
@ -3000,7 +3000,7 @@ begin
|
||||
begin
|
||||
if not CustomExceptionHandling(EIO, lSelectedController, lContext) then
|
||||
begin
|
||||
Log.ErrorFmt('[%s] %s [PathInfo "%s"] - %d %s (Custom message: "%s")',
|
||||
Log.Error('[%s] %s [PathInfo "%s"] - %d %s (Custom message: "%s")',
|
||||
[
|
||||
EIO.Classname,
|
||||
EIO.Message,
|
||||
@ -3033,7 +3033,7 @@ begin
|
||||
|
||||
if not CustomExceptionHandling(Ex, lSelectedController, lContext) then
|
||||
begin
|
||||
Log.ErrorFmt('[%s] %s [PathInfo "%s"] - %d %s (Custom message: "%s")',
|
||||
Log.Error('[%s] %s [PathInfo "%s"] - %d %s (Custom message: "%s")',
|
||||
[
|
||||
Ex.Classname,
|
||||
Ex.Message,
|
||||
@ -3062,7 +3062,7 @@ begin
|
||||
begin
|
||||
if not CustomExceptionHandling(Ex, lSelectedController, lContext) then
|
||||
begin
|
||||
Log.ErrorFmt('[%s] %s [PathInfo "%s"] - %d %s (Custom message: "%s")',
|
||||
Log.Error('[%s] %s [PathInfo "%s"] - %d %s (Custom message: "%s")',
|
||||
[
|
||||
Ex.Classname,
|
||||
Ex.Message,
|
||||
@ -3652,7 +3652,7 @@ begin
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
Log.ErrorFmt('[%s] %s', [E.Classname, E.Message], LOGGERPRO_TAG);
|
||||
Log.Error('[%s] %s', [E.Classname, E.Message], LOGGERPRO_TAG);
|
||||
|
||||
AResponse.StatusCode := http_status.InternalServerError; // default is Internal Server Error
|
||||
if E is EMVCException then
|
||||
@ -4313,7 +4313,7 @@ begin
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
Log.ErrorFmt('[%s] %s', [E.Classname, E.Message], LOGGERPRO_TAG);
|
||||
Log.Error('[%s] %s', [E.Classname, E.Message], LOGGERPRO_TAG);
|
||||
raise;
|
||||
end;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user