@athenna/logger 3.0.5 → 3.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@athenna/logger",
3
- "version": "3.0.5",
3
+ "version": "3.0.7",
4
4
  "description": "The Athenna logging solution. Log in stdout, files and buckets.",
5
5
  "license": "MIT",
6
6
  "author": "João Lenon <lenon@athenna.io>",
@@ -51,9 +51,9 @@
51
51
  "telegraf": "4.7.0"
52
52
  },
53
53
  "devDependencies": {
54
- "@athenna/common": "3.0.0",
55
- "@athenna/config": "3.0.2",
56
- "@athenna/ioc": "3.0.0",
54
+ "@athenna/common": "3.0.2",
55
+ "@athenna/config": "3.0.4",
56
+ "@athenna/ioc": "3.0.2",
57
57
  "@japa/assert": "1.3.4",
58
58
  "@japa/run-failed-tests": "1.0.7",
59
59
  "@japa/runner": "2.0.7",
@@ -135,8 +135,10 @@
135
135
  "node": true
136
136
  },
137
137
  "globals": {
138
+ "ioc": true,
138
139
  "Env": true,
139
- "ioc": true
140
+ "Path": true,
141
+ "Config": true
140
142
  },
141
143
  "plugins": [
142
144
  "prettier"
@@ -60,7 +60,7 @@ export class Driver {
60
60
  * @param {any} configs
61
61
  * @return {ConsoleDriver}
62
62
  */
63
- constructor(configs) {
63
+ constructor(configs = {}) {
64
64
  this.configs = configs
65
65
 
66
66
  const json = Json.copy(configs)
@@ -70,8 +70,8 @@ export class Driver {
70
70
 
71
71
  this.driverConfig = json
72
72
  this.level = json.level || 'info'
73
- this.formatter = configs.formatter
74
- this.formatterConfig = configs.formatterConfig
73
+ this.formatter = configs.formatter || 'none'
74
+ this.formatterConfig = configs.formatterConfig || {}
75
75
  }
76
76
 
77
77
  /**
@@ -69,6 +69,20 @@ export class DriverFactory {
69
69
  return new Driver(configs)
70
70
  }
71
71
 
72
+ /**
73
+ * Fabricate a new instance of a driver without
74
+ * configurations.
75
+ *
76
+ * @param {string} driverName
77
+ * @param {any} runtimeConfig
78
+ * @return {any}
79
+ */
80
+ static fabricateOnly(driverName, runtimeConfig = {}) {
81
+ const { Driver } = this.#drivers.get(driverName)
82
+
83
+ return new Driver(runtimeConfig)
84
+ }
85
+
72
86
  /**
73
87
  * Creates a new driver implementation.
74
88
  *
@@ -7,7 +7,9 @@
7
7
  * file that was distributed with this source code.
8
8
  */
9
9
 
10
- import chalk from 'chalk'
10
+ import { Is } from '@athenna/common'
11
+ import { format } from 'node:util'
12
+ import chalk, { Chalk } from 'chalk'
11
13
 
12
14
  export class ColorHelper {
13
15
  /**
@@ -274,4 +276,47 @@ export class ColorHelper {
274
276
  static httpMethod(method) {
275
277
  return this[method]
276
278
  }
279
+
280
+ /**
281
+ * Applies the log engine to execute chalk methods.
282
+ *
283
+ * @param {string} args
284
+ * @return {any}
285
+ */
286
+ static applyLogEngine(...args) {
287
+ if (!Is.String(args[0])) {
288
+ return args[0]
289
+ }
290
+
291
+ let content = format(...args.filter(arg => arg !== undefined))
292
+
293
+ const matches = content.match(/\({(.*?)} ([\s\S]*?)\)/g)
294
+
295
+ if (!matches) {
296
+ return content
297
+ }
298
+
299
+ matches.forEach(match => {
300
+ const [chalkMethodsInBrackets, chalkMethodsString] =
301
+ match.match(/\{(.*?)\}/)
302
+
303
+ const message = match
304
+ .replace(chalkMethodsInBrackets, '')
305
+ .replace(/\s*\(\s*|\s*\)\s*/g, '')
306
+
307
+ const chalkMethodsArray = chalkMethodsString.replace(/\s/g, '').split(',')
308
+
309
+ let chalk = new Chalk()
310
+
311
+ chalkMethodsArray.forEach(chalkMethod => {
312
+ if (!chalk[chalkMethod]) return
313
+
314
+ chalk = chalk[chalkMethod]
315
+ })
316
+
317
+ content = content.replace(match, chalk(message))
318
+ })
319
+
320
+ return content
321
+ }
277
322
  }
@@ -0,0 +1,134 @@
1
+ /**
2
+ * @athenna/logger
3
+ *
4
+ * (c) João Lenon <lenon@athenna.io>
5
+ *
6
+ * For the full copyright and license information, please view the LICENSE
7
+ * file that was distributed with this source code.
8
+ */
9
+
10
+ import { ColorHelper } from '#src/index'
11
+ import { DriverFactory } from '#src/Factories/DriverFactory'
12
+
13
+ export class ConsoleLogger {
14
+ /**
15
+ * The driver responsible for transporting the logs.
16
+ *
17
+ * @type {any[]}
18
+ */
19
+ #drivers = []
20
+
21
+ /**
22
+ * Creates a new instance of ConsoleLogger.
23
+ *
24
+ * @param {any} [runtimeConfigs]
25
+ * @return {ConsoleLogger}
26
+ */
27
+ constructor(runtimeConfigs) {
28
+ this.#drivers.push(DriverFactory.fabricateOnly('console', runtimeConfigs))
29
+ }
30
+
31
+ /**
32
+ * Set runtime configurations for drivers and
33
+ * formatters.
34
+ *
35
+ * @return {ConsoleLogger}
36
+ */
37
+ config() {
38
+ return this
39
+ }
40
+
41
+ /**
42
+ * Change the log channel.
43
+ *
44
+ * @return {ConsoleLogger}
45
+ */
46
+ channel() {
47
+ return this
48
+ }
49
+
50
+ /**
51
+ * Call drivers to transport the log.
52
+ *
53
+ * @param {string} level
54
+ * @param {string} args
55
+ * @return {any | Promise<any>}
56
+ */
57
+ #log(level, ...args) {
58
+ const message = ColorHelper.applyLogEngine(...args)
59
+
60
+ const promises = this.#drivers.map(d => d.transport(level, message))
61
+
62
+ return Promise.all(promises)
63
+ }
64
+
65
+ /**
66
+ * Creates a log of type trace in channel.
67
+ *
68
+ * @param {string|any} args
69
+ * @return {any | Promise<any>}
70
+ */
71
+ trace(...args) {
72
+ return this.#log('trace', ...args)
73
+ }
74
+
75
+ /**
76
+ * Creates a log of type debug in channel.
77
+ *
78
+ * @param {string|any} args
79
+ * @return {any | Promise<any>}
80
+ */
81
+ debug(...args) {
82
+ return this.#log('debug', ...args)
83
+ }
84
+
85
+ /**
86
+ * Creates a log of type info in channel.
87
+ *
88
+ * @param {string|any} args
89
+ * @return {any | Promise<any>}
90
+ */
91
+ info(...args) {
92
+ return this.#log('info', ...args)
93
+ }
94
+
95
+ /**
96
+ * Creates a log of type success in channel.
97
+ *
98
+ * @param {string|any} args
99
+ * @return {any | Promise<any>}
100
+ */
101
+ success(...args) {
102
+ return this.#log('success', ...args)
103
+ }
104
+
105
+ /**
106
+ * Creates a log of type warn in channel.
107
+ *
108
+ * @param {string|any} args
109
+ * @return {any | Promise<any>}
110
+ */
111
+ warn(...args) {
112
+ return this.#log('warn', ...args)
113
+ }
114
+
115
+ /**
116
+ * Creates a log of type error in channel.
117
+ *
118
+ * @param {string|any} args
119
+ * @return {any | Promise<any>}
120
+ */
121
+ error(...args) {
122
+ return this.#log('error', ...args)
123
+ }
124
+
125
+ /**
126
+ * Creates a log of type fatal in channel.
127
+ *
128
+ * @param {string|any} args
129
+ * @return {any | Promise<any>}
130
+ */
131
+ fatal(...args) {
132
+ return this.#log('fatal', ...args)
133
+ }
134
+ }
package/src/index.d.ts CHANGED
@@ -1,3 +1,12 @@
1
+ /**
2
+ * @athenna/logger
3
+ *
4
+ * (c) João Lenon <lenon@athenna.io>
5
+ *
6
+ * For the full copyright and license information, please view the LICENSE
7
+ * file that was distributed with this source code.
8
+ */
9
+
1
10
  import { Facade } from '@athenna/ioc'
2
11
 
3
12
  export const Log: typeof Facade & Logger
@@ -404,6 +413,14 @@ export class ColorHelper {
404
413
  * @return {import('chalk').ChalkInstance}
405
414
  */
406
415
  static httpMethod(method: any): import('chalk').ChalkInstance
416
+
417
+ /**
418
+ * Applies the log engine to execute chalk methods.
419
+ *
420
+ * @param {string} args
421
+ * @return {any}
422
+ */
423
+ static applyLogEngine(...args): any
407
424
  }
408
425
 
409
426
  export class FactoryHelper {
@@ -447,6 +464,16 @@ export class DriverFactory {
447
464
  */
448
465
  static fabricate(channelName: string, runtimeConfig?: any): any
449
466
 
467
+ /**
468
+ * Fabricate a new instance of a driver without
469
+ * configurations.
470
+ *
471
+ * @param {string} driverName
472
+ * @param {any} runtimeConfig
473
+ * @return {any}
474
+ */
475
+ static fabricateOnly(driverName: string, runtimeConfig?: any): any
476
+
450
477
  /**
451
478
  * Creates a new driver implementation.
452
479
  *
@@ -496,6 +523,104 @@ export class FormatterFactory {
496
523
  static createFormatter(name: string, formatter: () => any): void
497
524
  }
498
525
 
526
+ export class ConsoleLogger {
527
+ /**
528
+ * Creates a log of type trace in channel.
529
+ *
530
+ * @param {string|any} message
531
+ * @return {any | Promise<any>}
532
+ */
533
+ trace(message: string | any): any | Promise<any>
534
+
535
+ /**
536
+ * Creates a log of type trace in channel.
537
+ *
538
+ * @param {string[]|any[]} args
539
+ * @return {any | Promise<any>}
540
+ */
541
+ trace(...args: string[] | any[]): any | Promise<any>
542
+
543
+ /**
544
+ * Creates a log of type debug in channel.
545
+ *
546
+ * @param {string|any} message
547
+ * @return {any | Promise<any>}
548
+ */
549
+ debug(message: string | any): any | Promise<any>
550
+
551
+ /**
552
+ * Creates a log of type debug in channel.
553
+ *
554
+ * @param {string[]|any[]} args
555
+ * @return {any | Promise<any>}
556
+ */
557
+ debug(...args: string[] | any[]): any | Promise<any>
558
+
559
+ /**
560
+ * Creates a log of type info in channel.
561
+ *
562
+ * @param {string|any} message
563
+ * @return {any | Promise<any>}
564
+ */
565
+ info(message: string | any): any | Promise<any>
566
+
567
+ /**
568
+ * Creates a log of type info in channel.
569
+ *
570
+ * @param {string[]|any[]} args
571
+ * @return {any | Promise<any>}
572
+ */
573
+ info(...args: string[] | any[]): any | Promise<any>
574
+
575
+ /**
576
+ * Creates a log of type success in channel.
577
+ *
578
+ * @param {string|any} message
579
+ * @return {any | Promise<any>}
580
+ */
581
+ success(message: string | any): any | Promise<any>
582
+
583
+ /**
584
+ * Creates a log of type success in channel.
585
+ *
586
+ * @param {string[]|any[]} args
587
+ * @return {any | Promise<any>}
588
+ */
589
+ success(...args: string[] | any[]): any | Promise<any>
590
+
591
+ /**
592
+ * Creates a log of type warn in channel.
593
+ *
594
+ * @param {string|any} message
595
+ * @return {any | Promise<any>}
596
+ */
597
+ warn(message: string | any): any | Promise<any>
598
+
599
+ /**
600
+ * Creates a log of type warn in channel.
601
+ *
602
+ * @param {string[]|any[]} args
603
+ * @return {any | Promise<any>}
604
+ */
605
+ warn(...args: string[] | any[]): any | Promise<any>
606
+
607
+ /**
608
+ * Creates a log of type error in channel.
609
+ *
610
+ * @param {string|any} message
611
+ * @return {any | Promise<any>}
612
+ */
613
+ error(message: string | any): any | Promise<any>
614
+
615
+ /**
616
+ * Creates a log of type error in channel.
617
+ *
618
+ * @param {string[]|any[]} args
619
+ * @return {any | Promise<any>}
620
+ */
621
+ error(...args: string[] | any[]): any | Promise<any>
622
+ }
623
+
499
624
  export class Logger {
500
625
  /**
501
626
  * Set runtime configurations for drivers and
@@ -609,4 +734,20 @@ export class Logger {
609
734
  * @return {any | Promise<any>}
610
735
  */
611
736
  error(...args: string[] | any[]): any | Promise<any>
737
+
738
+ /**
739
+ * Get a new instance of the ConsoleLogger.
740
+ *
741
+ * @param {any} [runtimeConfigs]
742
+ * @return {ConsoleLogger}
743
+ */
744
+ getConsoleLogger(runtimeConfigs?: any): ConsoleLogger
745
+
746
+ /**
747
+ * Get a new instance of the ConsoleLogger.
748
+ *
749
+ * @param {any} [runtimeConfigs]
750
+ * @return {ConsoleLogger}
751
+ */
752
+ static getConsoleLogger(runtimeConfigs?: any): ConsoleLogger
612
753
  }
package/src/index.js CHANGED
@@ -1,12 +1,20 @@
1
- import { Chalk } from 'chalk'
2
- import { format } from 'node:util'
3
- import { Is } from '@athenna/common'
4
-
1
+ /**
2
+ * @athenna/logger
3
+ *
4
+ * (c) João Lenon <lenon@athenna.io>
5
+ *
6
+ * For the full copyright and license information, please view the LICENSE
7
+ * file that was distributed with this source code.
8
+ */
9
+
10
+ import { ColorHelper } from '#src/index'
11
+ import { ConsoleLogger } from '#src/Helpers/ConsoleLogger'
5
12
  import { DriverFactory } from '#src/Factories/DriverFactory'
6
13
 
7
14
  export * from './Facades/Log.js'
8
15
 
9
16
  export * from './Helpers/ColorHelper.js'
17
+ export * from './Helpers/ConsoleLogger.js'
10
18
  export * from './Helpers/FactoryHelper.js'
11
19
 
12
20
  export * from './Drivers/Driver.js'
@@ -36,6 +44,10 @@ export class Logger {
36
44
  * @return {Logger}
37
45
  */
38
46
  constructor() {
47
+ if (!Config.exists(`logging.channels.${Config.get('logging.default')}`)) {
48
+ return this
49
+ }
50
+
39
51
  this.#drivers.push(DriverFactory.fabricate('default', this.#runtimeConfigs))
40
52
  }
41
53
 
@@ -76,7 +88,7 @@ export class Logger {
76
88
  * @return {any | Promise<any>}
77
89
  */
78
90
  #log(level, ...args) {
79
- const message = this.#applyEngine(...args)
91
+ const message = ColorHelper.applyLogEngine(...args)
80
92
 
81
93
  const promises = this.#drivers.map(d => d.transport(level, message))
82
94
 
@@ -154,45 +166,22 @@ export class Logger {
154
166
  }
155
167
 
156
168
  /**
157
- * Applies the log engine to execute chalk methods.
169
+ * Get a new instance of the ConsoleLogger.
158
170
  *
159
- * @param {string} args
160
- * @return {any}
171
+ * @param {any} [runtimeConfigs]
172
+ * @return {ConsoleLogger}
161
173
  */
162
- #applyEngine(...args) {
163
- if (!Is.String(args[0])) {
164
- return args[0]
165
- }
166
-
167
- let content = format(...args.filter(arg => arg !== undefined))
168
-
169
- const matches = content.match(/\({(.*?)} ([\s\S]*?)\)/g)
170
-
171
- if (!matches) {
172
- return content
173
- }
174
-
175
- matches.forEach(match => {
176
- const [chalkMethodsInBrackets, chalkMethodsString] =
177
- match.match(/\{(.*?)\}/)
178
-
179
- const message = match
180
- .replace(chalkMethodsInBrackets, '')
181
- .replace(/\s*\(\s*|\s*\)\s*/g, '')
182
-
183
- const chalkMethodsArray = chalkMethodsString.replace(/\s/g, '').split(',')
184
-
185
- let chalk = new Chalk()
186
-
187
- chalkMethodsArray.forEach(chalkMethod => {
188
- if (!chalk[chalkMethod]) return
189
-
190
- chalk = chalk[chalkMethod]
191
- })
192
-
193
- content = content.replace(match, chalk(message))
194
- })
174
+ getConsoleLogger(runtimeConfigs) {
175
+ return Logger.getConsoleLogger(runtimeConfigs)
176
+ }
195
177
 
196
- return content
178
+ /**
179
+ * Get a new instance of the ConsoleLogger.
180
+ *
181
+ * @param {any} [runtimeConfigs]
182
+ * @return {ConsoleLogger}
183
+ */
184
+ static getConsoleLogger(runtimeConfigs) {
185
+ return new ConsoleLogger(runtimeConfigs)
197
186
  }
198
187
  }