1 {
2  *****************************************************************************
3   This file is part of LazUtils.
4 
5   See the file COPYING.modifiedLGPL.txt, included in this distribution,
6   for details about the license.
7  *****************************************************************************
8 }
9 unit LazLoggerDummy;
10 
11 {$mode objfpc}{$H+}
12 
13 (*
14   Provide an empty re-implementation of LazLoggerBase
15 
16   The aim is to allow
17   - RegisterLogGroup
18   - debugln
19   to be called, and translate into empty method, or even inline no code at all
20 
21   Any function above that may be limited
22 *)
23 
24 interface
25 uses
26   Classes, SysUtils, FileUtil, types, LazClasses;
27 
28 type
29   TLazLoggerLogGroupFlag =
30   ( lgfAddedByParamParser,        // Not added via Register. This is a placeholder for the enabled-state given by the user, via cmd-line
31     lgfNoDefaultEnabledSpecified  // Registered without default
32 
33   );
34   TLazLoggerLogGroupFlags = set of TLazLoggerLogGroupFlag;
35 
36   TLazLoggerLogGroup = record
37     ConfigName: String;  // case insensitive
38     Enabled: Boolean;
39     Flags: TLazLoggerLogGroupFlags;
40     FOpenedIndents: Integer;
41   end;
42   PLazLoggerLogGroup = ^TLazLoggerLogGroup;
43 
44   TLazLoggerWriteEvent = procedure (Sender: TObject; S: string; var Handled: Boolean) of object;
45 
46 
47 {$DEFINE USED_BY_LAZLOGGER_DUMMY}
48 {$push}
49 {$HINTS off}
50 {$I LazLoggerIntf.inc}
51 {$pop}
52 
53 type
54   (* All empty methods *)
55 
56   { TLazLoggerBlockHandler
57     called for DebuglnEnter / Exit
58   }
59 
60   TLazLoggerBlockHandler = class
61   public
62     procedure IncreaseIndent; virtual; abstract;
63     procedure DecreaseIndent; virtual; abstract;
64   end;
65 
66   { TLazLoggerLogGroupList }
67 
68   TLazLoggerLogGroupList = class(TRefCountedObject)
69   private
GetItemnull70     function GetItem({%H-}Index: Integer): PLazLoggerLogGroup;
71   public
72     procedure Assign({%H-}Src: TLazLoggerLogGroupList);
IndexOfnull73     function  IndexOf(const {%H-}AConfigName: String): integer;
IndexOfnull74     function  IndexOf(const {%H-}AnEntry: PLazLoggerLogGroup): integer;
Findnull75     function  Find(const {%H-}AConfigName: String): PLazLoggerLogGroup;
Countnull76     function  Count: integer;
77     property  Item[Index: Integer]: PLazLoggerLogGroup read GetItem; default;
78   end;
79 
80   { TLazLogger }
81 
82   TLazLogger = class(TRefCountedObject)
83   private
84     FMaxNestPrefixLen: Integer;
85     FNestLvlIndent: Integer;
86     FUseGlobalLogGroupList: Boolean;
GetLogGroupListnull87     function GetLogGroupList: TLazLoggerLogGroupList;
88     procedure SetMaxNestPrefixLen(AValue: Integer);
89     procedure SetNestLvlIndent(AValue: Integer);
90     procedure SetUseGlobalLogGroupList(AValue: Boolean);
91   public
92     procedure Assign({%H-}Src: TLazLogger); virtual;
93     procedure Init;
94     procedure Finish;
95 
96     property  NestLvlIndent: Integer read FNestLvlIndent write SetNestLvlIndent;
97     property  MaxNestPrefixLen: Integer read FMaxNestPrefixLen write SetMaxNestPrefixLen;
98 
99   public
RegisterLogGroupnull100     function  RegisterLogGroup(const {%H-}AConfigName: String; {%H-}ADefaulEnabled: Boolean) : PLazLoggerLogGroup; virtual;
RegisterLogGroupnull101     function  RegisterLogGroup(const {%H-}AConfigName: String) : PLazLoggerLogGroup; virtual;
FindOrRegisterLogGroupnull102     function  FindOrRegisterLogGroup(const {%H-}AConfigName: String; {%H-}ADefaulEnabled: Boolean) : PLazLoggerLogGroup; virtual;
FindOrRegisterLogGroupnull103     function  FindOrRegisterLogGroup(const {%H-}AConfigName: String) : PLazLoggerLogGroup; virtual;
104     property  LogGroupList: TLazLoggerLogGroupList read GetLogGroupList;
105     property  UseGlobalLogGroupList: Boolean read FUseGlobalLogGroupList write SetUseGlobalLogGroupList;
106   public
107     procedure DebuglnStack(const {%H-}s: string = '');
108 
109     procedure DbgOut(const {%H-}s: string = ''); overload;
110     procedure DbgOut({%H-}Args: array of const); overload;
111     procedure DbgOut(const {%H-}S: String; {%H-}Args: array of const); overload;// similar to Format(s,Args)
112     procedure DbgOut(const {%H-}s1, {%H-}s2: string; const {%H-}s3: string = '';
113                      const {%H-}s4: string = ''; const {%H-}s5: string = ''; const {%H-}s6: string = '';
114                      const {%H-}s7: string = ''; const {%H-}s8: string = ''; const {%H-}s9: string = '';
115                      const {%H-}s10: string = ''; const {%H-}s11: string = ''; const {%H-}s12: string = '';
116                      const {%H-}s13: string = ''; const {%H-}s14: string = ''; const {%H-}s15: string = '';
117                      const {%H-}s16: string = ''; const {%H-}s17: string = ''; const {%H-}s18: string = ''); overload;
118 
119     procedure DebugLn(const {%H-}s: string = ''); overload;
120     procedure DebugLn({%H-}Args: array of const); overload;
121     procedure DebugLn(const {%H-}S: String; {%H-}Args: array of const); overload;// similar to Format(s,Args)
122     procedure DebugLn(const {%H-}s1, {%H-}s2: string; const {%H-}s3: string = '';
123                       const {%H-}s4: string = ''; const {%H-}s5: string = ''; const {%H-}s6: string = '';
124                       const {%H-}s7: string = ''; const {%H-}s8: string = ''; const {%H-}s9: string = '';
125                       const {%H-}s10: string = ''; const {%H-}s11: string = ''; const {%H-}s12: string = '';
126                       const {%H-}s13: string = ''; const {%H-}s14: string = ''; const {%H-}s15: string = '';
127                       const {%H-}s16: string = ''; const {%H-}s17: string = ''; const {%H-}s18: string = ''); overload;
128 
129     procedure DebugLnEnter(const {%H-}s: string = ''); overload;
130     procedure DebugLnEnter({%H-}Args: array of const); overload;
131     procedure DebugLnEnter({%H-}s: string; {%H-}Args: array of const); overload;
132     procedure DebugLnEnter(const {%H-}s1, {%H-}s2: string; const {%H-}s3: string = '';
133                            const {%H-}s4: string = ''; const {%H-}s5: string = ''; const {%H-}s6: string = '';
134                            const {%H-}s7: string = ''; const {%H-}s8: string = ''; const {%H-}s9: string = '';
135                            const {%H-}s10: string = ''; const {%H-}s11: string = ''; const {%H-}s12: string = '';
136                            const {%H-}s13: string = ''; const {%H-}s14: string = ''; const {%H-}s15: string = '';
137                            const {%H-}s16: string = ''; const {%H-}s17: string = ''; const {%H-}s18: string = ''); overload;
138 
139     procedure DebugLnExit(const {%H-}s: string = ''); overload;
140     procedure DebugLnExit({%H-}Args: array of const); overload;
141     procedure DebugLnExit({%H-}s: string; {%H-}Args: array of const); overload;
142     procedure DebugLnExit(const {%H-}s1, {%H-}s2: string; const {%H-}s3: string = '';
143                           const {%H-}s4: string = ''; const {%H-}s5: string = ''; const {%H-}s6: string = '';
144                           const {%H-}s7: string = ''; const {%H-}s8: string = ''; const {%H-}s9: string = '';
145                           const {%H-}s10: string = ''; const {%H-}s11: string = ''; const {%H-}s12: string = '';
146                           const {%H-}s13: string = ''; const {%H-}s14: string = ''; const {%H-}s15: string = '';
147                           const {%H-}s16: string = ''; const {%H-}s17: string = ''; const {%H-}s18: string = ''); overload;
148 
149 
150     procedure DebuglnStack({%H-}LogGroup: PLazLoggerLogGroup; const {%H-}s: string = '');
151 
152     procedure DbgOut({%H-}LogGroup: PLazLoggerLogGroup; const {%H-}s: string = ''); overload;
153     procedure DbgOut({%H-}LogGroup: PLazLoggerLogGroup; {%H-}Args: array of const); overload;
154     procedure DbgOut({%H-}LogGroup: PLazLoggerLogGroup; const {%H-}S: String; {%H-}Args: array of const); overload;// similar to Format(s,Args)
155     procedure DbgOut({%H-}LogGroup: PLazLoggerLogGroup; const {%H-}s1, {%H-}s2: string; const {%H-}s3: string = '';
156                      const {%H-}s4: string = ''; const {%H-}s5: string = ''; const {%H-}s6: string = '';
157                      const {%H-}s7: string = ''; const {%H-}s8: string = ''; const {%H-}s9: string = '';
158                      const {%H-}s10: string = ''; const {%H-}s11: string = ''; const {%H-}s12: string = '';
159                      const {%H-}s13: string = ''; const {%H-}s14: string = ''; const {%H-}s15: string = '';
160                      const {%H-}s16: string = ''; const {%H-}s17: string = ''; const {%H-}s18: string = ''); overload;
161 
162     procedure DebugLn({%H-}LogGroup: PLazLoggerLogGroup; const {%H-}s: string = ''); overload;
163     procedure DebugLn({%H-}LogGroup: PLazLoggerLogGroup; {%H-}Args: array of const); overload;
164     procedure DebugLn({%H-}LogGroup: PLazLoggerLogGroup; const {%H-}S: String; {%H-}Args: array of const); overload;// similar to Format(s,Args)
165     procedure DebugLn({%H-}LogGroup: PLazLoggerLogGroup; const {%H-}s1, {%H-}s2: string; const {%H-}s3: string = '';
166                       const {%H-}s4: string = ''; const {%H-}s5: string = ''; const {%H-}s6: string = '';
167                       const {%H-}s7: string = ''; const {%H-}s8: string = ''; const {%H-}s9: string = '';
168                       const {%H-}s10: string = ''; const {%H-}s11: string = ''; const {%H-}s12: string = '';
169                       const {%H-}s13: string = ''; const {%H-}s14: string = ''; const {%H-}s15: string = '';
170                       const {%H-}s16: string = ''; const {%H-}s17: string = ''; const {%H-}s18: string = ''); overload;
171 
172     procedure DebugLnEnter({%H-}LogGroup: PLazLoggerLogGroup; const {%H-}s: string = ''); overload;
173     procedure DebugLnEnter({%H-}LogGroup: PLazLoggerLogGroup; {%H-}Args: array of const); overload;
174     procedure DebugLnEnter({%H-}LogGroup: PLazLoggerLogGroup; {%H-}s: string; {%H-}Args: array of const); overload;
175     procedure DebugLnEnter({%H-}LogGroup: PLazLoggerLogGroup; const {%H-}s1, {%H-}s2: string; const {%H-}s3: string = '';
176                            const {%H-}s4: string = ''; const {%H-}s5: string = ''; const {%H-}s6: string = '';
177                            const {%H-}s7: string = ''; const {%H-}s8: string = ''; const {%H-}s9: string = '';
178                            const {%H-}s10: string = ''; const {%H-}s11: string = ''; const {%H-}s12: string = '';
179                            const {%H-}s13: string = ''; const {%H-}s14: string = ''; const {%H-}s15: string = '';
180                            const {%H-}s16: string = ''; const {%H-}s17: string = ''; const {%H-}s18: string = ''); overload;
181 
182     procedure DebugLnExit({%H-}LogGroup: PLazLoggerLogGroup; const {%H-}s: string = ''); overload;
183     procedure DebugLnExit({%H-}LogGroup: PLazLoggerLogGroup; {%H-}Args: array of const); overload;
184     procedure DebugLnExit({%H-}LogGroup: PLazLoggerLogGroup; {%H-}s: string; {%H-}Args: array of const); overload;
185     procedure DebugLnExit({%H-}LogGroup: PLazLoggerLogGroup; const {%H-}s1, {%H-}s2: string; const {%H-}s3: string = '';
186                           const {%H-}s4: string = ''; const {%H-}s5: string = ''; const {%H-}s6: string = '';
187                           const {%H-}s7: string = ''; const {%H-}s8: string = ''; const {%H-}s9: string = '';
188                           const {%H-}s10: string = ''; const {%H-}s11: string = ''; const {%H-}s12: string = '';
189                           const {%H-}s13: string = ''; const {%H-}s14: string = ''; const {%H-}s15: string = '';
190                           const {%H-}s16: string = ''; const {%H-}s17: string = ''; const {%H-}s18: string = ''); overload;
191 
192   end;
193 
194 
GetDebugLoggerGroupsnull195 function GetDebugLoggerGroups: TLazLoggerLogGroupList; inline;
196 procedure SetDebugLoggerGroups({%H-}ALogGroups: TLazLoggerLogGroupList);
197 
GetDebugLoggernull198 function GetDebugLogger: TLazLogger; inline;
GetExistingDebugLoggernull199 function GetExistingDebugLogger: TLazLogger; inline; // No Autocreate
200 procedure SetDebugLogger({%H-}ALogger: TLazLogger);
201 
202 procedure RecreateDebugLogger;
203 
204 property DebugLogger: TLazLogger read GetDebugLogger write SetDebugLogger;
205 property DebugLoggerGroups: TLazLoggerLogGroupList read GetDebugLoggerGroups write SetDebugLoggerGroups;
206 
207 type
TRefCountedObjectnull208   TLazDebugLoggerCreator = function: TRefCountedObject;
209 
210 // Using base TRefCountedObject, so if none of the functions is used in the app, then even the class should be smart linked
211 var
212   LazDebugLoggerCreator: TLazDebugLoggerCreator = nil;
213   OnWidgetSetDebugLn: TLazLoggerWriteEvent;
214   OnWidgetSetDbgOut:  TLazLoggerWriteEvent;
215 
216 
217 implementation
218 
219 var // Using base TRefCountedObject, so if none of the functions is used in the app, then even the class should be smart linked
220   TheLazLogger: TRefCountedObject = nil;
221   TheLazLoggerGroups: TRefCountedObject = nil;
222 
223 {$push}
224 {$HINTS off}
225 {$I LazLoggerImpl.inc}
226 {$pop}
227 
228 procedure CreateDebugLogger;
229 begin
230   if (TheLazLogger <> nil) then
231     exit;
232   if (TheLazLogger = nil) then
233     TheLazLogger := TLazLogger.Create;
234   TheLazLogger.AddReference;
235 end;
236 
GetDebugLoggernull237 function GetDebugLogger: TLazLogger;
238 begin
239   if (TheLazLogger = nil) then
240     CreateDebugLogger;
241   Result := TLazLogger(TheLazLogger);
242 end;
243 
GetExistingDebugLoggernull244 function GetExistingDebugLogger: TLazLogger;
245 begin
246   Result := TLazLogger(TheLazLogger);
247 end;
248 
249 procedure SetDebugLogger(ALogger: TLazLogger);
250 begin
251 end;
252 
253 procedure RecreateDebugLogger;
254 begin
255 end;
256 
GetDebugLoggerGroupsnull257 function GetDebugLoggerGroups: TLazLoggerLogGroupList;
258 begin
259   if (TheLazLoggerGroups = nil) then begin
260     TheLazLoggerGroups := TLazLoggerLogGroupList.Create;
261     TheLazLoggerGroups.AddReference;
262   end;
263   Result := TLazLoggerLogGroupList(TheLazLoggerGroups);
264 end;
265 
266 procedure SetDebugLoggerGroups(ALogGroups: TLazLoggerLogGroupList);
267 begin
268 end;
269 
TLazLogger.GetLogGroupListnull270 function TLazLogger.GetLogGroupList: TLazLoggerLogGroupList;
271 begin
272   Result := DebugLoggerGroups;
273 end;
274 
275 procedure TLazLogger.SetMaxNestPrefixLen(AValue: Integer);
276 begin
277   FMaxNestPrefixLen := AValue;
278 end;
279 
280 procedure TLazLogger.SetNestLvlIndent(AValue: Integer);
281 begin
282   FNestLvlIndent := AValue;
283 end;
284 
285 procedure TLazLogger.SetUseGlobalLogGroupList(AValue: Boolean);
286 begin
287   FUseGlobalLogGroupList := AValue;
288 end;
289 
290 procedure TLazLogger.Assign(Src: TLazLogger);
291 begin
292 
293 end;
294 
295 procedure TLazLogger.Init;
296 begin
297 
298 end;
299 
300 procedure TLazLogger.Finish;
301 begin
302 
303 end;
304 
TLazLogger.RegisterLogGroupnull305 function TLazLogger.RegisterLogGroup(const AConfigName: String;
306   ADefaulEnabled: Boolean): PLazLoggerLogGroup;
307 begin
308   Result := nil;
309 end;
310 
TLazLogger.RegisterLogGroupnull311 function TLazLogger.RegisterLogGroup(const AConfigName: String): PLazLoggerLogGroup;
312 begin
313   Result := nil;
314 end;
315 
FindOrRegisterLogGroupnull316 function TLazLogger.FindOrRegisterLogGroup(const AConfigName: String;
317   ADefaulEnabled: Boolean): PLazLoggerLogGroup;
318 begin
319   Result := nil;
320 end;
321 
FindOrRegisterLogGroupnull322 function TLazLogger.FindOrRegisterLogGroup(const AConfigName: String): PLazLoggerLogGroup;
323 begin
324   Result := nil;
325 end;
326 
327 procedure TLazLogger.DebuglnStack(const s: string);
328 begin
329 
330 end;
331 
332 procedure TLazLogger.DbgOut(const s: string);
333 begin
334 
335 end;
336 
337 procedure TLazLogger.DbgOut(Args: array of const);
338 begin
339 
340 end;
341 
342 procedure TLazLogger.DbgOut(const S: String; Args: array of const);
343 begin
344 
345 end;
346 
347 procedure TLazLogger.DbgOut(const s1, s2: string; const s3: string; const s4: string;
348   const s5: string; const s6: string; const s7: string; const s8: string; const s9: string;
349   const s10: string; const s11: string; const s12: string; const s13: string;
350   const s14: string; const s15: string; const s16: string; const s17: string;
351   const s18: string);
352 begin
353 
354 end;
355 
356 procedure TLazLogger.DebugLn(const s: string);
357 begin
358 
359 end;
360 
361 procedure TLazLogger.DebugLn(Args: array of const);
362 begin
363 
364 end;
365 
366 procedure TLazLogger.DebugLn(const S: String; Args: array of const);
367 begin
368 
369 end;
370 
371 procedure TLazLogger.DebugLn(const s1, s2: string; const s3: string; const s4: string;
372   const s5: string; const s6: string; const s7: string; const s8: string; const s9: string;
373   const s10: string; const s11: string; const s12: string; const s13: string;
374   const s14: string; const s15: string; const s16: string; const s17: string;
375   const s18: string);
376 begin
377 
378 end;
379 
380 procedure TLazLogger.DebugLnEnter(const s: string);
381 begin
382 
383 end;
384 
385 procedure TLazLogger.DebugLnEnter(Args: array of const);
386 begin
387 
388 end;
389 
390 procedure TLazLogger.DebugLnEnter(s: string; Args: array of const);
391 begin
392 
393 end;
394 
395 procedure TLazLogger.DebugLnEnter(const s1, s2: string; const s3: string; const s4: string;
396   const s5: string; const s6: string; const s7: string; const s8: string; const s9: string;
397   const s10: string; const s11: string; const s12: string; const s13: string;
398   const s14: string; const s15: string; const s16: string; const s17: string;
399   const s18: string);
400 begin
401 
402 end;
403 
404 procedure TLazLogger.DebugLnExit(const s: string);
405 begin
406 
407 end;
408 
409 procedure TLazLogger.DebugLnExit(Args: array of const);
410 begin
411 
412 end;
413 
414 procedure TLazLogger.DebugLnExit(s: string; Args: array of const);
415 begin
416 
417 end;
418 
419 procedure TLazLogger.DebugLnExit(const s1, s2: string; const s3: string; const s4: string;
420   const s5: string; const s6: string; const s7: string; const s8: string; const s9: string;
421   const s10: string; const s11: string; const s12: string; const s13: string;
422   const s14: string; const s15: string; const s16: string; const s17: string;
423   const s18: string);
424 begin
425 
426 end;
427 
428 procedure TLazLogger.DebuglnStack(LogGroup: PLazLoggerLogGroup; const s: string);
429 begin
430 
431 end;
432 
433 procedure TLazLogger.DbgOut(LogGroup: PLazLoggerLogGroup; const s: string);
434 begin
435 
436 end;
437 
438 procedure TLazLogger.DbgOut(LogGroup: PLazLoggerLogGroup; Args: array of const);
439 begin
440 
441 end;
442 
443 procedure TLazLogger.DbgOut(LogGroup: PLazLoggerLogGroup; const S: String;
444   Args: array of const);
445 begin
446 
447 end;
448 
449 procedure TLazLogger.DbgOut(LogGroup: PLazLoggerLogGroup; const s1, s2: string;
450   const s3: string; const s4: string; const s5: string; const s6: string; const s7: string;
451   const s8: string; const s9: string; const s10: string; const s11: string; const s12: string;
452   const s13: string; const s14: string; const s15: string; const s16: string;
453   const s17: string; const s18: string);
454 begin
455 
456 end;
457 
458 procedure TLazLogger.DebugLn(LogGroup: PLazLoggerLogGroup; const s: string);
459 begin
460 
461 end;
462 
463 procedure TLazLogger.DebugLn(LogGroup: PLazLoggerLogGroup; Args: array of const);
464 begin
465 
466 end;
467 
468 procedure TLazLogger.DebugLn(LogGroup: PLazLoggerLogGroup; const S: String;
469   Args: array of const);
470 begin
471 
472 end;
473 
474 procedure TLazLogger.DebugLn(LogGroup: PLazLoggerLogGroup; const s1, s2: string;
475   const s3: string; const s4: string; const s5: string; const s6: string; const s7: string;
476   const s8: string; const s9: string; const s10: string; const s11: string; const s12: string;
477   const s13: string; const s14: string; const s15: string; const s16: string;
478   const s17: string; const s18: string);
479 begin
480 
481 end;
482 
483 procedure TLazLogger.DebugLnEnter(LogGroup: PLazLoggerLogGroup; const s: string);
484 begin
485 
486 end;
487 
488 procedure TLazLogger.DebugLnEnter(LogGroup: PLazLoggerLogGroup; Args: array of const);
489 begin
490 
491 end;
492 
493 procedure TLazLogger.DebugLnEnter(LogGroup: PLazLoggerLogGroup; s: string;
494   Args: array of const);
495 begin
496 
497 end;
498 
499 procedure TLazLogger.DebugLnEnter(LogGroup: PLazLoggerLogGroup; const s1, s2: string;
500   const s3: string; const s4: string; const s5: string; const s6: string; const s7: string;
501   const s8: string; const s9: string; const s10: string; const s11: string; const s12: string;
502   const s13: string; const s14: string; const s15: string; const s16: string;
503   const s17: string; const s18: string);
504 begin
505 
506 end;
507 
508 procedure TLazLogger.DebugLnExit(LogGroup: PLazLoggerLogGroup; const s: string);
509 begin
510 
511 end;
512 
513 procedure TLazLogger.DebugLnExit(LogGroup: PLazLoggerLogGroup; Args: array of const);
514 begin
515 
516 end;
517 
518 procedure TLazLogger.DebugLnExit(LogGroup: PLazLoggerLogGroup; s: string;
519   Args: array of const);
520 begin
521 
522 end;
523 
524 procedure TLazLogger.DebugLnExit(LogGroup: PLazLoggerLogGroup; const s1, s2: string;
525   const s3: string; const s4: string; const s5: string; const s6: string; const s7: string;
526   const s8: string; const s9: string; const s10: string; const s11: string; const s12: string;
527   const s13: string; const s14: string; const s15: string; const s16: string;
528   const s17: string; const s18: string);
529 begin
530 
531 end;
532 
533 { TLazLoggerLogGroupList }
534 
GetItemnull535 function TLazLoggerLogGroupList.GetItem(Index: Integer): PLazLoggerLogGroup;
536 begin
537   Result := nil;
538 end;
539 
540 procedure TLazLoggerLogGroupList.Assign(Src: TLazLoggerLogGroupList);
541 begin
542 end;
543 
IndexOfnull544 function TLazLoggerLogGroupList.IndexOf(const AConfigName: String): integer;
545 begin
546   Result := -1;
547 end;
548 
IndexOfnull549 function TLazLoggerLogGroupList.IndexOf(const AnEntry: PLazLoggerLogGroup): integer;
550 begin
551   Result := -1;
552 end;
553 
TLazLoggerLogGroupList.Findnull554 function TLazLoggerLogGroupList.Find(const AConfigName: String): PLazLoggerLogGroup;
555 begin
556   Result := nil;
557 end;
558 
TLazLoggerLogGroupList.Countnull559 function TLazLoggerLogGroupList.Count: integer;
560 begin
561   Result := 0;
562 end;
563 
564 finalization // Using TObject, so if none of the functions is used in the app, then even the rlass should be smart linked
565   ReleaseRefAndNil(TheLazLogger);
566   ReleaseRefAndNil(TheLazLoggerGroups);
567 
568 end.
569 
570