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