Blame


1 b1d17a52 2023-07-07 izzyb # IRCNOW lib
2 b1d17a52 2023-07-07 izzyb
3 b1d17a52 2023-07-07 izzyb * 1. [Logger](#Logger)
4 b1d17a52 2023-07-07 izzyb * 1.1. [Formating the logger](#Formatingthelogger)
5 b1d17a52 2023-07-07 izzyb * 1.2. [SUGAR vs JSON](#SUGARvsJSON)
6 b1d17a52 2023-07-07 izzyb * 1.3. [Loggin Verbosity](#LogginVerbosity)
7 b1d17a52 2023-07-07 izzyb
8 b1d17a52 2023-07-07 izzyb
9 b1d17a52 2023-07-07 izzyb ## 1. <a name='Logger'></a>Logger
10 b1d17a52 2023-07-07 izzyb
11 b1d17a52 2023-07-07 izzyb Example usage:
12 b1d17a52 2023-07-07 izzyb ```perl
13 b1d17a52 2023-07-07 izzyb use strict;
14 b1d17a52 2023-07-07 izzyb use warnings;
15 b1d17a52 2023-07-07 izzyb
16 b1d17a52 2023-07-07 izzyb use lib qw(./lib);
17 b1d17a52 2023-07-07 izzyb use IRCNOW::Logger;
18 b1d17a52 2023-07-07 izzyb
19 b1d17a52 2023-07-07 izzyb my $logger = new IRCNOW::Logger(IRCNOW::Logger->INFO, IRCNOW::Logger->SUGAR);
20 b1d17a52 2023-07-07 izzyb #my $logger = new IRCNOW::Logger(IRCNOW::Logger->DEBUG, IRCNOW::Logger->SUGAR);
21 b1d17a52 2023-07-07 izzyb #my $logger = new Logger(IRCNOW::Logger->DEBUG, Logger->SUGAR, ":loglevel :timestamp :msg");
22 b1d17a52 2023-07-07 izzyb #my $logger = new Logger(IRCNOW::Logger->DEBUG, Logger->SUGAR, ":loglevel :invalid :timestamp :msg");
23 b1d17a52 2023-07-07 izzyb #my $logger = new Logger(IRCNOW::Logger->DEBUG, Logger->SUGAR, ":timestamp [:loglevel%2] :package%8 :file%10 :msg");
24 b1d17a52 2023-07-07 izzyb
25 b1d17a52 2023-07-07 izzyb $logger->debug("debug");
26 b1d17a52 2023-07-07 izzyb $logger->info("info");
27 b1d17a52 2023-07-07 izzyb $logger->warn("warn");
28 b1d17a52 2023-07-07 izzyb $logger->error("error");
29 b1d17a52 2023-07-07 izzyb
30 b1d17a52 2023-07-07 izzyb
31 b1d17a52 2023-07-07 izzyb # output:
32 b1d17a52 2023-07-07 izzyb # 2023-07-02 19:22:03 [DEBUG] main test.pl:12 debug
33 b1d17a52 2023-07-07 izzyb # 2023-07-02 19:22:03 [INFO ] main test.pl:13 info
34 b1d17a52 2023-07-07 izzyb # 2023-07-02 19:22:03 [WARN ] main test.pl:14 warn
35 b1d17a52 2023-07-07 izzyb # 2023-07-02 19:22:03 [ERROR] main test.pl:15 error
36 b1d17a52 2023-07-07 izzyb ```
37 b1d17a52 2023-07-07 izzyb
38 b1d17a52 2023-07-07 izzyb Arguments are: `verbosity, printType, format`.
39 b1d17a52 2023-07-07 izzyb
40 b1d17a52 2023-07-07 izzyb ### 1.1. <a name='Formatingthelogger'></a>Formating the logger
41 b1d17a52 2023-07-07 izzyb
42 b1d17a52 2023-07-07 izzyb Logger has these fields:
43 b1d17a52 2023-07-07 izzyb * timestamp
44 b1d17a52 2023-07-07 izzyb * loglevel
45 b1d17a52 2023-07-07 izzyb * package
46 b1d17a52 2023-07-07 izzyb * file
47 b1d17a52 2023-07-07 izzyb * fileline (file with line number)
48 b1d17a52 2023-07-07 izzyb * line
49 b1d17a52 2023-07-07 izzyb * msg
50 b1d17a52 2023-07-07 izzyb
51 b1d17a52 2023-07-07 izzyb Prepend the field with a `:` and postfix the field with a `%` followed by a number. Add spaces in between.
52 b1d17a52 2023-07-07 izzyb ex:
53 b1d17a52 2023-07-07 izzyb
54 b1d17a52 2023-07-07 izzyb `:timestamp [:loglevel%5] :package%8 :fileline%10 :msg`
55 b1d17a52 2023-07-07 izzyb
56 b1d17a52 2023-07-07 izzyb Note: If your field value is longer than the specified length, it will print out the full value.
57 b1d17a52 2023-07-07 izzyb EX:
58 b1d17a52 2023-07-07 izzyb Format: `:timestamp [:loglevel%2] :package%8 :fileline%10 :msg`
59 b1d17a52 2023-07-07 izzyb result:
60 b1d17a52 2023-07-07 izzyb ```
61 b1d17a52 2023-07-07 izzyb 2023-07-02 19:21:54 [DEBUG] main test.pl debug
62 b1d17a52 2023-07-07 izzyb 2023-07-02 19:21:54 [INFO] main test.pl info
63 b1d17a52 2023-07-07 izzyb 2023-07-02 19:21:54 [WARN] main test.pl warn
64 b1d17a52 2023-07-07 izzyb 2023-07-02 19:21:54 [ERROR] main test.pl error
65 b1d17a52 2023-07-07 izzyb ```
66 b1d17a52 2023-07-07 izzyb
67 b1d17a52 2023-07-07 izzyb ### 1.2. <a name='SUGARvsJSON'></a>SUGAR vs JSON
68 b1d17a52 2023-07-07 izzyb
69 b1d17a52 2023-07-07 izzyb There are two options to print logs:
70 b1d17a52 2023-07-07 izzyb * sugar
71 b1d17a52 2023-07-07 izzyb * JSON
72 b1d17a52 2023-07-07 izzyb
73 b1d17a52 2023-07-07 izzyb JSON logging is meant for being picked up by services such as grafana or the elk stack.
74 b1d17a52 2023-07-07 izzyb Sugar logging is meant for human readable output to stdout.
75 b1d17a52 2023-07-07 izzyb
76 b1d17a52 2023-07-07 izzyb Example of JSON:
77 b1d17a52 2023-07-07 izzyb ```
78 b1d17a52 2023-07-07 izzyb { "level": "DEBUG", "msg": "debug", "package": "main", "file": "test.pl:12" }
79 b1d17a52 2023-07-07 izzyb { "level": "INFO", "msg": "info", "package": "main", "file": "test.pl:13" }
80 b1d17a52 2023-07-07 izzyb { "level": "WARN", "msg": "warn", "package": "main", "file": "test.pl:14" }
81 b1d17a52 2023-07-07 izzyb { "level": "ERROR", "msg": "error", "package": "main", "file": "test.pl:15" }
82 b1d17a52 2023-07-07 izzyb ```
83 b1d17a52 2023-07-07 izzyb
84 b1d17a52 2023-07-07 izzyb Example of Sugar:
85 b1d17a52 2023-07-07 izzyb ```
86 b1d17a52 2023-07-07 izzyb 2023-07-02 19:22:03 [DEBUG] main test.pl:12 debug
87 b1d17a52 2023-07-07 izzyb 2023-07-02 19:22:03 [INFO ] main test.pl:13 info
88 b1d17a52 2023-07-07 izzyb 2023-07-02 19:22:03 [WARN ] main test.pl:14 warn
89 b1d17a52 2023-07-07 izzyb 2023-07-02 19:22:03 [ERROR] main test.pl:15 error
90 b1d17a52 2023-07-07 izzyb ```
91 b1d17a52 2023-07-07 izzyb
92 b1d17a52 2023-07-07 izzyb ### 1.3. <a name='LogginVerbosity'></a>Logging Verbosity
93 b1d17a52 2023-07-07 izzyb
94 b1d17a52 2023-07-07 izzyb There are verbosity levels:
95 b1d17a52 2023-07-07 izzyb * NONE
96 b1d17a52 2023-07-07 izzyb * ERRORS
97 b1d17a52 2023-07-07 izzyb * ERROR (backwards compatible)
98 b1d17a52 2023-07-07 izzyb * WARNINGS
99 b1d17a52 2023-07-07 izzyb * WARN (backwards compatible)
100 b1d17a52 2023-07-07 izzyb * INFO
101 b1d17a52 2023-07-07 izzyb * DEBUG
102 b1d17a52 2023-07-07 izzyb * ALL
103 b1d17a52 2023-07-07 izzyb
104 b1d17a52 2023-07-07 izzyb Each level is in order such that if the `INFO` level was chosen, you would see logs for `ERROR`, `WARN`, and `INFO`