|
2 | 2 | // |
3 | 3 | // LoggerPro |
4 | 4 | // |
5 | | -// Copyright (c) 2010-2025 Daniele Teti |
| 5 | +// Copyright (c) 2010-2026 Daniele Teti |
6 | 6 | // |
7 | 7 | // https://github.com/danieleteti/loggerpro |
8 | 8 | // |
@@ -185,6 +185,13 @@ interface |
185 | 185 | function WithLogLevel(aLogLevel: TLogType): IVCLListViewAppenderConfigurator; |
186 | 186 | function WithRenderer(aRenderer: ILogItemRenderer): IVCLListViewAppenderConfigurator; |
187 | 187 | end; |
| 188 | + |
| 189 | + { Windows Event Log appender configurator (Windows only) } |
| 190 | + IWindowsEventLogAppenderConfigurator = interface(IAppenderConfigurator) |
| 191 | + ['{A1B2C3D4-E5F6-7A8B-9C0D-E1F2A3B4C5D6}'] |
| 192 | + function WithLogLevel(aLogLevel: TLogType): IWindowsEventLogAppenderConfigurator; |
| 193 | + function WithSourceName(const aSourceName: string): IWindowsEventLogAppenderConfigurator; |
| 194 | + end; |
188 | 195 | {$ENDIF} |
189 | 196 |
|
190 | 197 | { FireDAC DB appender configurator (cross-platform) } |
@@ -225,6 +232,10 @@ interface |
225 | 232 | function WriteToVCLMemo(aMemo: TObject): IVCLMemoAppenderConfigurator; |
226 | 233 | function WriteToVCLListBox(aListBox: TObject): IVCLListBoxAppenderConfigurator; |
227 | 234 | function WriteToVCLListView(aListView: TObject): IVCLListViewAppenderConfigurator; |
| 235 | + { Windows Event Log appender } |
| 236 | + function WriteToWindowsEventLog: IWindowsEventLogAppenderConfigurator; |
| 237 | + { Windows Event Log appender for Windows Services (uses TService.LogMessage) } |
| 238 | + function WriteToWindowsEventLogForService(aService: TObject): IWindowsEventLogAppenderConfigurator; |
228 | 239 | {$ENDIF} |
229 | 240 | { FireDAC appender (cross-platform) } |
230 | 241 | function WriteToFireDAC: IFireDACAppenderConfigurator; |
@@ -264,8 +275,10 @@ implementation |
264 | 275 | , LoggerPro.VCLMemoAppender |
265 | 276 | , LoggerPro.VCLListBoxAppender |
266 | 277 | , LoggerPro.VCLListViewAppender |
| 278 | + , LoggerPro.WindowsEventLogAppender |
267 | 279 | , Vcl.StdCtrls |
268 | 280 | , Vcl.ComCtrls |
| 281 | + , Vcl.SvcMgr |
269 | 282 | {$ENDIF} |
270 | 283 | ; |
271 | 284 |
|
@@ -506,6 +519,20 @@ TVCLListViewAppenderConfigurator = class(TBaseAppenderConfigurator, IVCLListVi |
506 | 519 | function Done: ILoggerProBuilder; |
507 | 520 | end; |
508 | 521 |
|
| 522 | + { Windows Event Log appender configurator (Windows only) } |
| 523 | + TWindowsEventLogAppenderConfigurator = class(TBaseAppenderConfigurator, IWindowsEventLogAppenderConfigurator) |
| 524 | + private |
| 525 | + FService: TService; |
| 526 | + FSourceName: string; |
| 527 | + FUseService: Boolean; |
| 528 | + public |
| 529 | + constructor Create(aBuilder: TLoggerProBuilder); overload; |
| 530 | + constructor Create(aBuilder: TLoggerProBuilder; aService: TService); overload; |
| 531 | + function WithLogLevel(aLogLevel: TLogType): IWindowsEventLogAppenderConfigurator; |
| 532 | + function WithSourceName(const aSourceName: string): IWindowsEventLogAppenderConfigurator; |
| 533 | + function Done: ILoggerProBuilder; |
| 534 | + end; |
| 535 | + |
509 | 536 | {$ENDIF} |
510 | 537 |
|
511 | 538 | { FireDAC DB appender configurator (cross-platform) } |
@@ -563,6 +590,9 @@ TLoggerProBuilder = class(TInterfacedObject, ILoggerProBuilder) |
563 | 590 | function WriteToVCLMemo(aMemo: TObject): IVCLMemoAppenderConfigurator; |
564 | 591 | function WriteToVCLListBox(aListBox: TObject): IVCLListBoxAppenderConfigurator; |
565 | 592 | function WriteToVCLListView(aListView: TObject): IVCLListViewAppenderConfigurator; |
| 593 | + // Windows Event Log appender (Windows only) |
| 594 | + function WriteToWindowsEventLog: IWindowsEventLogAppenderConfigurator; |
| 595 | + function WriteToWindowsEventLogForService(aService: TObject): IWindowsEventLogAppenderConfigurator; |
566 | 596 | {$ENDIF} |
567 | 597 | // FireDAC appender (cross-platform) |
568 | 598 | function WriteToFireDAC: IFireDACAppenderConfigurator; |
@@ -721,6 +751,18 @@ function TLoggerProBuilder.WriteToVCLListView(aListView: TObject): IVCLListViewA |
721 | 751 | Result := TVCLListViewAppenderConfigurator.Create(Self, TListView(aListView)); |
722 | 752 | end; |
723 | 753 |
|
| 754 | +function TLoggerProBuilder.WriteToWindowsEventLog: IWindowsEventLogAppenderConfigurator; |
| 755 | +begin |
| 756 | + Result := TWindowsEventLogAppenderConfigurator.Create(Self); |
| 757 | +end; |
| 758 | + |
| 759 | +function TLoggerProBuilder.WriteToWindowsEventLogForService(aService: TObject): IWindowsEventLogAppenderConfigurator; |
| 760 | +begin |
| 761 | + if not (aService is TService) then |
| 762 | + raise ELoggerPro.Create('WriteToWindowsEventLogForService requires a TService instance'); |
| 763 | + Result := TWindowsEventLogAppenderConfigurator.Create(Self, TService(aService)); |
| 764 | +end; |
| 765 | + |
724 | 766 | {$ENDIF} |
725 | 767 |
|
726 | 768 | function TLoggerProBuilder.WriteToFireDAC: IFireDACAppenderConfigurator; |
@@ -1508,6 +1550,50 @@ function TVCLListViewAppenderConfigurator.Done: ILoggerProBuilder; |
1508 | 1550 | Result := FBuilder; |
1509 | 1551 | end; |
1510 | 1552 |
|
| 1553 | +{ TWindowsEventLogAppenderConfigurator } |
| 1554 | + |
| 1555 | +constructor TWindowsEventLogAppenderConfigurator.Create(aBuilder: TLoggerProBuilder); |
| 1556 | +begin |
| 1557 | + inherited Create(aBuilder); |
| 1558 | + FService := nil; |
| 1559 | + FSourceName := ''; |
| 1560 | + FUseService := False; |
| 1561 | +end; |
| 1562 | + |
| 1563 | +constructor TWindowsEventLogAppenderConfigurator.Create(aBuilder: TLoggerProBuilder; aService: TService); |
| 1564 | +begin |
| 1565 | + inherited Create(aBuilder); |
| 1566 | + FService := aService; |
| 1567 | + FSourceName := ''; |
| 1568 | + FUseService := True; |
| 1569 | +end; |
| 1570 | + |
| 1571 | +function TWindowsEventLogAppenderConfigurator.WithLogLevel(aLogLevel: TLogType): IWindowsEventLogAppenderConfigurator; |
| 1572 | +begin |
| 1573 | + FLogLevel := aLogLevel; |
| 1574 | + FLogLevelSet := True; |
| 1575 | + Result := Self; |
| 1576 | +end; |
| 1577 | + |
| 1578 | +function TWindowsEventLogAppenderConfigurator.WithSourceName(const aSourceName: string): IWindowsEventLogAppenderConfigurator; |
| 1579 | +begin |
| 1580 | + FSourceName := aSourceName; |
| 1581 | + Result := Self; |
| 1582 | +end; |
| 1583 | + |
| 1584 | +function TWindowsEventLogAppenderConfigurator.Done: ILoggerProBuilder; |
| 1585 | +var |
| 1586 | + lAppender: ILogAppender; |
| 1587 | +begin |
| 1588 | + if FUseService then |
| 1589 | + lAppender := TLoggerProWindowsEventLogAppender.Create(FService) |
| 1590 | + else |
| 1591 | + lAppender := TLoggerProWindowsEventLogAppender.Create(FSourceName); |
| 1592 | + ApplyLogLevel(lAppender); |
| 1593 | + FBuilder.InternalAddAppender(lAppender); |
| 1594 | + Result := FBuilder; |
| 1595 | +end; |
| 1596 | + |
1511 | 1597 | {$ENDIF} |
1512 | 1598 |
|
1513 | 1599 | { TFireDACAppenderConfigurator } |
|
0 commit comments