@@ -311,14 +311,291 @@ applicationLogger.Close()
311
311
312
312
// Open the logger with a new message queue size.
313
313
if err := applicationLogger.Open(100); err != nil {
314
- panic(err)
314
+ panic(err)
315
315
}
316
316
` ` `
317
317
318
318
*Note: if you assign a new message queue size that is smaller than the number of messages sent to the queue, the logger
319
319
will add messages to the queue until it is not full, then it will wait (blocking the process) until the message from the
320
320
queue will be processed and free up the space in the message queue.*
321
321
322
+ ### Reading Configuration from File
323
+
324
+ You could also read configuration from a file. Configuration file should be in one of the following formats: ` *.json` ,
325
+ ` *.yaml` , ` *.xml` . Configuration file should contain the following fields:
326
+
327
+ ` ` ` text
328
+ - Loggers (array of loggers)
329
+ - Name (string)
330
+ - Time Format (string)
331
+ - Message Queue Size (int)
332
+ - Handlers (array of handlers)
333
+ - Type (string)
334
+ - From Level (string)
335
+ - To Level (string)
336
+ - File (string)
337
+ - Formatter (string)
338
+ - Type (string)
339
+ - Pretty Print (bool)
340
+ - Pair Separator (string)
341
+ - Key Value Delimiter (string)
342
+ - Template (template)
343
+ - String Value (string)
344
+ - Map Value (map of string to string)
345
+ ` ` `
346
+
347
+ Example of the configuration files:
348
+
349
+ - JSON
350
+
351
+ ` ` ` json
352
+ {
353
+ "loggers": [
354
+ {
355
+ "name": "example-logger",
356
+ "time-format": "2006-01-02 15:04:05",
357
+ "message-queue-size": 100,
358
+ "handlers": [
359
+ {
360
+ "type": "stdout",
361
+ "from-level": "all",
362
+ "to-level": "severe",
363
+ "formatter": {
364
+ "type": "json",
365
+ "pretty-print": false,
366
+ "template": {
367
+ "string": "%(datetime) - %(level) - %(message)",
368
+ "map": {
369
+ "timestamp": "%(datetime)",
370
+ "level": "%(level)",
371
+ "name": "%(name)"
372
+ }
373
+ }
374
+ }
375
+ },
376
+ {
377
+ "type": "stderr",
378
+ "from-level": "error",
379
+ "to-level": "null",
380
+ "formatter": {
381
+ "type": "key-value",
382
+ "pair-separator": " ",
383
+ "key-value-delimiter": ":",
384
+ "template": {
385
+ "string": "%(datetime) - %(level) - %(message)",
386
+ "map": {
387
+ "timestamp": "%(datetime)",
388
+ "level": "%(level)",
389
+ "name": "%(name)"
390
+ }
391
+ }
392
+ }
393
+ },
394
+ {
395
+ "type": "file",
396
+ "from-level": "all",
397
+ "to-level": "null",
398
+ "file": "example.log",
399
+ "formatter": {
400
+ "type": "json",
401
+ "pretty-print": true,
402
+ "template": {
403
+ "string": "%(datetime) - %(level) - %(message)",
404
+ "map": {
405
+ "timestamp": "%(datetime)",
406
+ "level": "%(level)",
407
+ "name": "%(name)"
408
+ }
409
+ }
410
+ }
411
+ }
412
+ ]
413
+ }
414
+ ]
415
+ }
416
+ ` ` `
417
+
418
+ - YAML
419
+
420
+ ` ` ` yaml
421
+ loggers:
422
+ - name: example-logger
423
+ time-format: "2006-01-02 15:04:05"
424
+ message-queue-size: 100
425
+ handlers:
426
+ - type: stdout
427
+ from-level: all
428
+ to-level: severe
429
+ formatter:
430
+ type: json
431
+ pretty-print: false
432
+ template:
433
+ string: "%(datetime) - %(level) - %(message)"
434
+ map:
435
+ timestamp: "%(datetime)"
436
+ level: "%(level)"
437
+ name: "%(name)"
438
+ - type: stderr
439
+ from-level: error
440
+ to-level: "null"
441
+ formatter:
442
+ type: key-value
443
+ pair-separator: " "
444
+ key-value-delimiter: ":"
445
+ template:
446
+ string: "%(datetime) - %(level) - %(message)"
447
+ map:
448
+ timestamp: "%(datetime)"
449
+ level: "%(level)"
450
+ name: "%(name)"
451
+ - type: file
452
+ from-level: all
453
+ to-level: "null"
454
+ file: example.log
455
+ formatter:
456
+ type: json
457
+ pretty-print: true
458
+ template:
459
+ string: "%(datetime) - %(level) - %(message)"
460
+ map:
461
+ timestamp: "%(datetime)"
462
+ level: "%(level)"
463
+ name: "%(name)"
464
+ ` ` `
465
+
466
+ - XML
467
+
468
+ ` ` ` xml
469
+ <root>
470
+ <loggers>
471
+ <logger>
472
+ <name>example-logger</name>
473
+ <time-format>2006-01-02 15:04:05</time-format>
474
+ <message-queue-size>100</message-queue-size>
475
+ <handlers>
476
+ <handler>
477
+ <type>stdout</type>
478
+ <from-level>all</from-level>
479
+ <to-level>severe</to-level>
480
+ <formatter>
481
+ <type>json</type>
482
+ <pretty-print>false</pretty-print>
483
+ <template>
484
+ <string>%(datetime) - %(level) - %(message)</string>
485
+ <map>
486
+ <timestamp>%(datetime)</timestamp>
487
+ <level>%(level)</level>
488
+ <name>%(name)</name>
489
+ </map>
490
+ </template>
491
+ </formatter>
492
+ </handler>
493
+ <handler>
494
+ <type>stderr</type>
495
+ <from-level>error</from-level>
496
+ <to-level>null</to-level>
497
+ <formatter>
498
+ <type>key-value</type>
499
+ <pair-separator> </pair-separator>
500
+ <key-value-delimiter>:</key-value-delimiter>
501
+ <template>
502
+ <string>%(datetime) - %(level) - %(message)</string>
503
+ <map>
504
+ <timestamp>%(datetime)</timestamp>
505
+ <level>%(level)</level>
506
+ <name>%(name)</name>
507
+ </map>
508
+ </template>
509
+ </formatter>
510
+ </handler>
511
+ <handler>
512
+ <type>file</type>
513
+ <from-level>all</from-level>
514
+ <to-level>null</to-level>
515
+ <file>example.log</file>
516
+ <formatter>
517
+ <type>json</type>
518
+ <pretty-print>true</pretty-print>
519
+ <template>
520
+ <string>%(datetime) - %(level) - %(message)</string>
521
+ <map>
522
+ <timestamp>%(datetime)</timestamp>
523
+ <level>%(level)</level>
524
+ <name>%(name)</name>
525
+ </map>
526
+ </template>
527
+ </formatter>
528
+ </handler>
529
+ </handlers>
530
+ </logger>
531
+ </loggers>
532
+ </root>
533
+ ` ` `
534
+
535
+ To create a logger from the configuration file, you need to:
536
+
537
+ 1 . Create a new Parser with the Configuration object. You shall use parser from the ` logger` or ` structuredlogger` .
538
+ 1 . Create a new Configuration object manually and initialize parser with it.
539
+ 1 . Parse configuration file to receive the Configuration . You could do this by calling the ` ReadFromJSON` ,
540
+ ` ReadFromYAML` , ` ReadFromXML` methods respectively, it will return the Configuration object.
541
+
542
+ ` ` ` go
543
+ // Parse configuration from JSON file.
544
+ newConfiguration, err := parser.ReadFromJSON("path/to/configuration/file.json")
545
+ if err != nil {
546
+ panic(err)
547
+ }
548
+
549
+ // Parse configuration from YAML file.
550
+ newConfiguration, err := parser.ReadFromYAML("path/to/configuration/file.yaml")
551
+ if err != nil {
552
+ panic(err)
553
+ }
554
+
555
+ // Parse configuration from XML file.
556
+ newConfiguration, err := parser.ReadFromXML("path/to/configuration/file.xml")
557
+ if err != nil {
558
+ panic(err)
559
+ }
560
+ ` ` `
561
+ 2 . Create a new Parser with the Configuration object. You shall use parser from the ` logger` or ` structuredlogger`
562
+ packages respectively, depending on which one you need.
563
+
564
+ ` ` ` go
565
+ newParser := parser.NewParser(newConfiguration)
566
+ ` ` `
567
+ 2 . Create Parser from the configuration file directly.
568
+
569
+ ` ` ` go
570
+ // Create a new Parser from JSON configuration file.
571
+ newParser, err := parser.ParseJSON("path/to/configuration/file.json")
572
+ if err != nil {
573
+ panic(err)
574
+ }
575
+
576
+ // Create a new Parser from YAML configuration file.
577
+ newParser, err := parser.ParseYAML("path/to/configuration/file.yaml")
578
+ if err != nil {
579
+ panic(err)
580
+ }
581
+
582
+ // Create a new Parser from XML configuration file.
583
+ newParser, err := parser.ParseXML("path/to/configuration/file.xml")
584
+ if err != nil {
585
+ panic(err)
586
+ }
587
+ ` ` `
588
+
589
+ 2 . Get a logger from the Parser .
590
+
591
+ ` ` ` go
592
+ // Standard Logger
593
+ newLogger := newParser.GetLogger("example-logger")
594
+
595
+ // Async Logger
596
+ newLogger := newParser.GetAsyncLogger("example-logger")
597
+ ` ` `
598
+
322
599
## Class Diagram
323
600
324
601

0 commit comments