1 b1d17a52 2023-07-07 izzyb # IRCNOW lib
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)
9 b1d17a52 2023-07-07 izzyb ## 1. <a name='Logger'></a>Logger
11 b1d17a52 2023-07-07 izzyb Example usage:
13 b1d17a52 2023-07-07 izzyb use strict;
14 b1d17a52 2023-07-07 izzyb use warnings;
16 b1d17a52 2023-07-07 izzyb use lib qw(./lib);
17 b1d17a52 2023-07-07 izzyb use IRCNOW::Logger;
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");
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");
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
38 b1d17a52 2023-07-07 izzyb Arguments are: `verbosity, printType, format`.
40 b1d17a52 2023-07-07 izzyb ### 1.1. <a name='Formatingthelogger'></a>Formating the logger
42 b1d17a52 2023-07-07 izzyb Logger has these fields:
43 b1d17a52 2023-07-07 izzyb * timestamp
47 b1d17a52 2023-07-07 izzyb * fileline (file with line number)
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.
54 b1d17a52 2023-07-07 izzyb `:timestamp [:loglevel%5] :package%8 :fileline%10 :msg`
56 b1d17a52 2023-07-07 izzyb Note: If your field value is longer than the specified length, it will print out the full value.
58 b1d17a52 2023-07-07 izzyb Format: `:timestamp [:loglevel%2] :package%8 :fileline%10 :msg`
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
67 b1d17a52 2023-07-07 izzyb ### 1.2. <a name='SUGARvsJSON'></a>SUGAR vs JSON
69 b1d17a52 2023-07-07 izzyb There are two options to print logs:
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.
76 b1d17a52 2023-07-07 izzyb Example of JSON:
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" }
84 b1d17a52 2023-07-07 izzyb Example of Sugar:
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
92 b1d17a52 2023-07-07 izzyb ### 1.3. <a name='LogginVerbosity'></a>Logging Verbosity
94 b1d17a52 2023-07-07 izzyb There are verbosity levels:
97 b1d17a52 2023-07-07 izzyb * ERROR (backwards compatible)
99 b1d17a52 2023-07-07 izzyb * WARN (backwards compatible)
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`