Skip to content

Commit 7f60ba9

Browse files
committed
upd(framework): logger enhancements, templatepro improvements, loggerpro alignment
Logger (MVCFramework.Logger): - Add format string overloads for LogD/I/W/E/F - Add custom tag and message+object overloads - Add LogE(Exception) shortcuts - Add log level check helpers (IsDebugEnabled, IsInfoEnabled, etc.) - Add CreateLogBuilderWithDefaultConfiguration - Fix CreateNullLogger to use empty callback appender - Add comprehensive unit tests (52 tests in LoggerTestsU.pas) - Add logger_with_callback sample LoggerPro: - Add WindowsEventLogAppender to all packages (d100-d130) - Add pending configurator validation in Builder - Prevent missing .Done() before .Build() calls TemplatePro: - Add CompileFromString method for non-file templates - Add JSON array path parsing support - Add ApplyFilters method - Improve for-else block nesting tracking ExprEvaluator: - Minor improvements
1 parent 6859aac commit 7f60ba9

26 files changed

+3105
-138
lines changed

lib/loggerpro/LoggerPro.Builder.pas

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,7 @@ TCallbackAppenderConfigurator = class(TBaseAppenderConfigurator, ICallbackAppe
427427
FCallback: TLogItemCallback;
428428
FSynchronizeToMainThread: Boolean;
429429
public
430+
constructor Create(aBuilder: TLoggerProBuilder);
430431
function WithCallback(aCallback: TLogItemCallback): ICallbackAppenderConfigurator;
431432
function WithSynchronizeToMainThread(aValue: Boolean): ICallbackAppenderConfigurator;
432433
function WithLogLevel(aLogLevel: TLogType): ICallbackAppenderConfigurator;
@@ -568,6 +569,7 @@ TLoggerProBuilder = class(TInterfacedObject, ILoggerProBuilder)
568569
FDefaultRenderer: ILogItemRenderer;
569570
FDefaultTag: string;
570571
FStackTraceFormatter: TStackTraceFormatter;
572+
FPendingConfiguratorName: string;
571573
public
572574
constructor Create;
573575
destructor Destroy; override;
@@ -611,6 +613,8 @@ TLoggerProBuilder = class(TInterfacedObject, ILoggerProBuilder)
611613
// Used by configurators
612614
procedure InternalAddAppender(aAppender: ILogAppender);
613615
function GetDefaultRenderer: ILogItemRenderer;
616+
procedure SetPendingConfigurator(const aName: string);
617+
procedure ClearPendingConfigurator;
614618
end;
615619

616620
{ TBaseAppenderConfigurator }
@@ -661,6 +665,17 @@ class function TLoggerProBuilder.New: ILoggerProBuilder;
661665
procedure TLoggerProBuilder.InternalAddAppender(aAppender: ILogAppender);
662666
begin
663667
FAppenders.Add(aAppender);
668+
ClearPendingConfigurator;
669+
end;
670+
671+
procedure TLoggerProBuilder.SetPendingConfigurator(const aName: string);
672+
begin
673+
FPendingConfiguratorName := aName;
674+
end;
675+
676+
procedure TLoggerProBuilder.ClearPendingConfigurator;
677+
begin
678+
FPendingConfiguratorName := '';
664679
end;
665680

666681
function TLoggerProBuilder.WriteToAppender(aAppender: ILogAppender): ILoggerProBuilder;
@@ -671,61 +686,73 @@ function TLoggerProBuilder.WriteToAppender(aAppender: ILogAppender): ILoggerProB
671686

672687
function TLoggerProBuilder.WriteToConsole: IConsoleAppenderConfigurator;
673688
begin
689+
SetPendingConfigurator('WriteToConsole');
674690
Result := TConsoleAppenderConfigurator.Create(Self);
675691
end;
676692

677693
function TLoggerProBuilder.WriteToSimpleConsole: ISimpleConsoleAppenderConfigurator;
678694
begin
695+
SetPendingConfigurator('WriteToSimpleConsole');
679696
Result := TSimpleConsoleAppenderConfigurator.Create(Self);
680697
end;
681698

682699
function TLoggerProBuilder.WriteToFile: IFileAppenderConfigurator;
683700
begin
701+
SetPendingConfigurator('WriteToFile');
684702
Result := TFileAppenderConfigurator.Create(Self);
685703
end;
686704

687705
function TLoggerProBuilder.WriteToJSONLFile: IJSONLFileAppenderConfigurator;
688706
begin
707+
SetPendingConfigurator('WriteToJSONLFile');
689708
Result := TJSONLFileAppenderConfigurator.Create(Self);
690709
end;
691710

692711
function TLoggerProBuilder.WriteToTimeRotatingFile: ITimeRotatingFileAppenderConfigurator;
693712
begin
713+
SetPendingConfigurator('WriteToTimeRotatingFile');
694714
Result := TTimeRotatingFileAppenderConfigurator.Create(Self);
695715
end;
696716

697717
function TLoggerProBuilder.WriteToHTTP: IHTTPAppenderConfigurator;
698718
begin
719+
SetPendingConfigurator('WriteToHTTP');
699720
Result := THTTPAppenderConfigurator.Create(Self);
700721
end;
701722

702723
function TLoggerProBuilder.WriteToElasticSearch: IElasticSearchAppenderConfigurator;
703724
begin
725+
SetPendingConfigurator('WriteToElasticSearch');
704726
Result := TElasticSearchAppenderConfigurator.Create(Self);
705727
end;
706728

707729
function TLoggerProBuilder.WriteToMemory: IMemoryAppenderConfigurator;
708730
begin
731+
SetPendingConfigurator('WriteToMemory');
709732
Result := TMemoryAppenderConfigurator.Create(Self);
710733
end;
711734

712735
function TLoggerProBuilder.WriteToCallback: ICallbackAppenderConfigurator;
713736
begin
737+
SetPendingConfigurator('WriteToCallback');
714738
Result := TCallbackAppenderConfigurator.Create(Self);
715739
end;
716740

717741
function TLoggerProBuilder.WriteToSimpleCallback: ISimpleCallbackAppenderConfigurator;
718742
begin
743+
SetPendingConfigurator('WriteToSimpleCallback');
719744
Result := TSimpleCallbackAppenderConfigurator.Create(Self);
720745
end;
721746

722747
function TLoggerProBuilder.WriteToOutputDebugString: IOutputDebugStringAppenderConfigurator;
723748
begin
749+
SetPendingConfigurator('WriteToOutputDebugString');
724750
Result := TOutputDebugStringAppenderConfigurator.Create(Self);
725751
end;
726752

727753
function TLoggerProBuilder.WriteToUDPSyslog: IUDPSyslogAppenderConfigurator;
728754
begin
755+
SetPendingConfigurator('WriteToUDPSyslog');
729756
Result := TUDPSyslogAppenderConfigurator.Create(Self);
730757
end;
731758

@@ -734,44 +761,51 @@ function TLoggerProBuilder.WriteToVCLMemo(aMemo: TObject): IVCLMemoAppenderConfi
734761
begin
735762
if not (aMemo is TMemo) then
736763
raise ELoggerPro.Create('WriteToVCLMemo requires a TMemo instance');
764+
SetPendingConfigurator('WriteToVCLMemo');
737765
Result := TVCLMemoAppenderConfigurator.Create(Self, TMemo(aMemo));
738766
end;
739767

740768
function TLoggerProBuilder.WriteToVCLListBox(aListBox: TObject): IVCLListBoxAppenderConfigurator;
741769
begin
742770
if not (aListBox is TListBox) then
743771
raise ELoggerPro.Create('WriteToVCLListBox requires a TListBox instance');
772+
SetPendingConfigurator('WriteToVCLListBox');
744773
Result := TVCLListBoxAppenderConfigurator.Create(Self, TListBox(aListBox));
745774
end;
746775

747776
function TLoggerProBuilder.WriteToVCLListView(aListView: TObject): IVCLListViewAppenderConfigurator;
748777
begin
749778
if not (aListView is TListView) then
750779
raise ELoggerPro.Create('WriteToVCLListView requires a TListView instance');
780+
SetPendingConfigurator('WriteToVCLListView');
751781
Result := TVCLListViewAppenderConfigurator.Create(Self, TListView(aListView));
752782
end;
753783

754784
function TLoggerProBuilder.WriteToWindowsEventLog: IWindowsEventLogAppenderConfigurator;
755785
begin
786+
SetPendingConfigurator('WriteToWindowsEventLog');
756787
Result := TWindowsEventLogAppenderConfigurator.Create(Self);
757788
end;
758789

759790
function TLoggerProBuilder.WriteToWindowsEventLogForService(aService: TObject): IWindowsEventLogAppenderConfigurator;
760791
begin
761792
if not (aService is TService) then
762793
raise ELoggerPro.Create('WriteToWindowsEventLogForService requires a TService instance');
794+
SetPendingConfigurator('WriteToWindowsEventLogForService');
763795
Result := TWindowsEventLogAppenderConfigurator.Create(Self, TService(aService));
764796
end;
765797

766798
{$ENDIF}
767799

768800
function TLoggerProBuilder.WriteToFireDAC: IFireDACAppenderConfigurator;
769801
begin
802+
SetPendingConfigurator('WriteToFireDAC');
770803
Result := TFireDACAppenderConfigurator.Create(Self);
771804
end;
772805

773806
function TLoggerProBuilder.WriteToFilteredAppender(aAppender: ILogAppender): IFilteredAppenderConfigurator;
774807
begin
808+
SetPendingConfigurator('WriteToFilteredAppender');
775809
Result := TFilteredAppenderConfigurator.Create(Self, aAppender);
776810
end;
777811

@@ -817,6 +851,10 @@ function TLoggerProBuilder.Build: ILogWriter;
817851
lLogWriter: TCustomLogWriter;
818852
I: Integer;
819853
begin
854+
if not FPendingConfiguratorName.IsEmpty then
855+
raise ELoggerPro.Create('Appender configurator "' + FPendingConfiguratorName +
856+
'" was not finalized. Call .Done before calling .Build');
857+
820858
if FAppenders.Count = 0 then
821859
raise ELoggerPro.Create('No appenders configured. Add at least one appender before calling Build.');
822860

@@ -1284,6 +1322,12 @@ function TCallbackAppenderConfigurator.WithLogLevel(aLogLevel: TLogType): ICallb
12841322
Result := Self;
12851323
end;
12861324

1325+
constructor TCallbackAppenderConfigurator.Create(aBuilder: TLoggerProBuilder);
1326+
begin
1327+
inherited;
1328+
FSynchronizeToMainThread := False;
1329+
end;
1330+
12871331
function TCallbackAppenderConfigurator.Done: ILoggerProBuilder;
12881332
var
12891333
lAppender: ILogAppender;

lib/loggerpro/LoggerPro.WindowsEventLogAppender.pas

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,10 @@
2727

2828
unit LoggerPro.WindowsEventLogAppender;
2929

30-
{$IFNDEF MSWINDOWS}
31-
{$MESSAGE FATAL 'This unit only works with Windows'}
32-
{$ENDIF}
33-
3430
interface
3531

32+
{$IF Defined(MSWINDOWS)}
33+
3634
uses
3735
LoggerPro;
3836

@@ -59,8 +57,12 @@ TLoggerProWindowsEventLogAppender = class(TLoggerProAppenderBase)
5957
procedure WriteLog(const aLogItem: TLogItem); override;
6058
end;
6159

60+
{$ENDIF}
61+
6262
implementation
6363

64+
{$IF Defined(MSWINDOWS)}
65+
6466
uses
6567
Winapi.Windows,
6668
System.SysUtils,
@@ -164,4 +166,6 @@ procedure TLoggerProWindowsEventLogAppender.WriteLog(const aLogItem: TLogItem);
164166
end;
165167
end;
166168

169+
{$ENDIF}
170+
167171
end.

lib/loggerpro/packages/d100/loggerproRT.dpk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ contains
6262
LoggerPro.DBAppender in '..\..\LoggerPro.DBAppender.pas',
6363
LoggerPro.VCLListBoxAppender in '..\..\LoggerPro.VCLListBoxAppender.pas',
6464
LoggerPro.VCLListViewAppender in '..\..\LoggerPro.VCLListViewAppender.pas',
65-
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas';
65+
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas',
66+
LoggerPro.WindowsEventLogAppender in '..\..\LoggerPro.WindowsEventLogAppender.pas';
6667

6768
end.

lib/loggerpro/packages/d101/loggerproRT.dpk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ contains
6262
LoggerPro.DBAppender in '..\..\LoggerPro.DBAppender.pas',
6363
LoggerPro.VCLListBoxAppender in '..\..\LoggerPro.VCLListBoxAppender.pas',
6464
LoggerPro.VCLListViewAppender in '..\..\LoggerPro.VCLListViewAppender.pas',
65-
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas';
65+
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas',
66+
LoggerPro.WindowsEventLogAppender in '..\..\LoggerPro.WindowsEventLogAppender.pas';
6667

6768
end.

lib/loggerpro/packages/d102/loggerproRT.dpk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ contains
6262
LoggerPro.DBAppender in '..\..\LoggerPro.DBAppender.pas',
6363
LoggerPro.VCLListBoxAppender in '..\..\LoggerPro.VCLListBoxAppender.pas',
6464
LoggerPro.VCLListViewAppender in '..\..\LoggerPro.VCLListViewAppender.pas',
65-
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas';
65+
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas',
66+
LoggerPro.WindowsEventLogAppender in '..\..\LoggerPro.WindowsEventLogAppender.pas';
6667

6768
end.

lib/loggerpro/packages/d103/loggerproRT.dpk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ contains
6262
LoggerPro.DBAppender in '..\..\LoggerPro.DBAppender.pas',
6363
LoggerPro.VCLListBoxAppender in '..\..\LoggerPro.VCLListBoxAppender.pas',
6464
LoggerPro.VCLListViewAppender in '..\..\LoggerPro.VCLListViewAppender.pas',
65-
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas';
65+
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas',
66+
LoggerPro.WindowsEventLogAppender in '..\..\LoggerPro.WindowsEventLogAppender.pas';
6667

6768
end.

lib/loggerpro/packages/d104/loggerproRT.dpk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ contains
6262
LoggerPro.DBAppender in '..\..\LoggerPro.DBAppender.pas',
6363
LoggerPro.VCLListBoxAppender in '..\..\LoggerPro.VCLListBoxAppender.pas',
6464
LoggerPro.VCLListViewAppender in '..\..\LoggerPro.VCLListViewAppender.pas',
65-
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas';
65+
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas',
66+
LoggerPro.WindowsEventLogAppender in '..\..\LoggerPro.WindowsEventLogAppender.pas';
6667

6768
end.

lib/loggerpro/packages/d110/loggerproRT.dpk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ contains
6262
LoggerPro.DBAppender in '..\..\LoggerPro.DBAppender.pas',
6363
LoggerPro.VCLListBoxAppender in '..\..\LoggerPro.VCLListBoxAppender.pas',
6464
LoggerPro.VCLListViewAppender in '..\..\LoggerPro.VCLListViewAppender.pas',
65-
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas';
65+
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas',
66+
LoggerPro.WindowsEventLogAppender in '..\..\LoggerPro.WindowsEventLogAppender.pas';
6667

6768
end.

lib/loggerpro/packages/d120/loggerproRT.dpk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ contains
6262
LoggerPro.DBAppender in '..\..\LoggerPro.DBAppender.pas',
6363
LoggerPro.VCLListBoxAppender in '..\..\LoggerPro.VCLListBoxAppender.pas',
6464
LoggerPro.VCLListViewAppender in '..\..\LoggerPro.VCLListViewAppender.pas',
65-
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas';
65+
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas',
66+
LoggerPro.WindowsEventLogAppender in '..\..\LoggerPro.WindowsEventLogAppender.pas';
6667

6768
end.

lib/loggerpro/packages/d130/loggerproRT.dpk

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ contains
6262
LoggerPro.DBAppender in '..\..\LoggerPro.DBAppender.pas',
6363
LoggerPro.VCLListBoxAppender in '..\..\LoggerPro.VCLListBoxAppender.pas',
6464
LoggerPro.VCLListViewAppender in '..\..\LoggerPro.VCLListViewAppender.pas',
65-
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas';
65+
LoggerPro.VCLMemoAppender in '..\..\LoggerPro.VCLMemoAppender.pas',
66+
LoggerPro.WindowsEventLogAppender in '..\..\LoggerPro.WindowsEventLogAppender.pas';
6667

6768
end.
6869

70+

0 commit comments

Comments
 (0)