@knowark/loggarkjs 0.3.1 → 0.3.3
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/lib/index.d.ts +5 -1
- package/lib/logger.js +20 -9
- package/lib/logger.test.js +118 -100
- package/package.json +1 -1
package/lib/index.d.ts
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
export declare class Logger {
|
|
2
|
+
static Logger(): void
|
|
3
|
+
|
|
2
4
|
constructor (dependencies?: {
|
|
3
5
|
namespace?: string,
|
|
4
|
-
|
|
6
|
+
context?: object,
|
|
5
7
|
global?: object
|
|
6
8
|
})
|
|
7
9
|
|
|
10
|
+
context?: object
|
|
11
|
+
|
|
8
12
|
log(...args: string[]): void
|
|
9
13
|
|
|
10
14
|
error(...args: string[]): void
|
package/lib/logger.js
CHANGED
|
@@ -1,37 +1,48 @@
|
|
|
1
1
|
export class Logger {
|
|
2
|
-
|
|
2
|
+
static context () {
|
|
3
|
+
return null
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
#context = {}
|
|
7
|
+
|
|
8
|
+
constructor ({ namespace = '', context = null, global = globalThis } = {}) {
|
|
3
9
|
const levels = ['error', 'warn', 'info', 'debug']
|
|
4
10
|
const logvar = [namespace, 'LOGLEVEL'].filter(
|
|
5
11
|
Boolean).join('_').toUpperCase().replaceAll(' ', '_')
|
|
6
12
|
const loglevel = String(global[logvar]).toLowerCase()
|
|
7
13
|
this.global = global
|
|
8
14
|
this.logindex = levels.indexOf(loglevel)
|
|
9
|
-
this
|
|
15
|
+
this.#context = context
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
get context () {
|
|
19
|
+
const context = this.constructor.context()
|
|
20
|
+
return !(context || this.#context) ? null : { ...context, ...this.#context }
|
|
10
21
|
}
|
|
11
22
|
|
|
12
23
|
log (...args) {
|
|
13
|
-
if (this.logindex >= 0) log(this.global, 'log', this.
|
|
24
|
+
if (this.logindex >= 0) log(this.global, 'log', this.context, args)
|
|
14
25
|
}
|
|
15
26
|
|
|
16
27
|
error (...args) {
|
|
17
|
-
if (this.logindex >= 0) log(this.global, 'error', this.
|
|
28
|
+
if (this.logindex >= 0) log(this.global, 'error', this.context, args)
|
|
18
29
|
}
|
|
19
30
|
|
|
20
31
|
warn (...args) {
|
|
21
|
-
if (this.logindex >= 1) log(this.global, 'warn', this.
|
|
32
|
+
if (this.logindex >= 1) log(this.global, 'warn', this.context, args)
|
|
22
33
|
}
|
|
23
34
|
|
|
24
35
|
info (...args) {
|
|
25
|
-
if (this.logindex >= 2) log(this.global, 'info', this.
|
|
36
|
+
if (this.logindex >= 2) log(this.global, 'info', this.context, args)
|
|
26
37
|
}
|
|
27
38
|
|
|
28
39
|
debug (...args) {
|
|
29
|
-
if (this.logindex >= 3) log(this.global, 'debug', this.
|
|
40
|
+
if (this.logindex >= 3) log(this.global, 'debug', this.context, args)
|
|
30
41
|
}
|
|
31
42
|
}
|
|
32
43
|
|
|
33
|
-
function log (global, level,
|
|
44
|
+
function log (global, level, context, args) {
|
|
34
45
|
return global.console[level](
|
|
35
46
|
`[${level.toUpperCase()}]`,
|
|
36
|
-
...[
|
|
47
|
+
...[context ? JSON.stringify(context) : false, ...args].filter(Boolean))
|
|
37
48
|
}
|
package/lib/logger.test.js
CHANGED
|
@@ -1,104 +1,122 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { test, expect } from '@jest/globals'
|
|
2
2
|
import { Logger } from './logger.js'
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
info (...args) { mockGlobal.infoArgs = args },
|
|
14
|
-
debug (...args) { mockGlobal.debugArgs = args }
|
|
15
|
-
}
|
|
4
|
+
|
|
5
|
+
function setup () {
|
|
6
|
+
const mockGlobal = {
|
|
7
|
+
console: {
|
|
8
|
+
log (...args) { mockGlobal.logArgs = args },
|
|
9
|
+
error (...args) { mockGlobal.errorArgs = args },
|
|
10
|
+
warn (...args) { mockGlobal.warnArgs = args },
|
|
11
|
+
info (...args) { mockGlobal.infoArgs = args },
|
|
12
|
+
debug (...args) { mockGlobal.debugArgs = args }
|
|
16
13
|
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const labels = { correlationId: 'ABCD1234' }
|
|
71
|
-
const logger = new Logger({ global: mockGlobal, labels })
|
|
72
|
-
|
|
73
|
-
logger.log('Logging something...')
|
|
74
|
-
expect(mockGlobal.logArgs).toEqual([
|
|
75
|
-
'[LOG]',
|
|
76
|
-
JSON.stringify({ correlationId: 'ABCD1234' }),
|
|
77
|
-
'Logging something...'])
|
|
78
|
-
|
|
79
|
-
logger.labels.interactor = 'Informer'
|
|
80
|
-
logger.error('Logging something...')
|
|
81
|
-
expect(mockGlobal.errorArgs).toEqual([
|
|
82
|
-
'[ERROR]',
|
|
83
|
-
JSON.stringify({ correlationId: 'ABCD1234', interactor: 'Informer' }),
|
|
84
|
-
'Logging something...'])
|
|
85
|
-
|
|
86
|
-
logger.warn('Logging something...')
|
|
87
|
-
expect(mockGlobal.warnArgs).toEqual([
|
|
88
|
-
'[WARN]',
|
|
89
|
-
JSON.stringify({ correlationId: 'ABCD1234', interactor: 'Informer' }),
|
|
90
|
-
'Logging something...'])
|
|
91
|
-
|
|
92
|
-
logger.info('Logging something...')
|
|
93
|
-
expect(mockGlobal.infoArgs).toEqual([
|
|
94
|
-
'[INFO]',
|
|
95
|
-
JSON.stringify({ correlationId: 'ABCD1234', interactor: 'Informer' }),
|
|
96
|
-
'Logging something...'])
|
|
97
|
-
|
|
98
|
-
logger.debug('Logging something...')
|
|
99
|
-
expect(mockGlobal.debugArgs).toEqual([
|
|
100
|
-
'[DEBUG]',
|
|
101
|
-
JSON.stringify({ correlationId: 'ABCD1234', interactor: 'Informer' }),
|
|
102
|
-
'Logging something...'])
|
|
103
|
-
})
|
|
14
|
+
}
|
|
15
|
+
return {mockGlobal}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
test('can be instantiated', () => {
|
|
19
|
+
const logger = new Logger()
|
|
20
|
+
expect(logger).toBeTruthy()
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
test('can be instantiated', () => {
|
|
24
|
+
const logger = new Logger()
|
|
25
|
+
expect(logger).toBeTruthy()
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
test('is disabled by default', () => {
|
|
29
|
+
const { mockGlobal } = setup()
|
|
30
|
+
const logger = new Logger({ global: mockGlobal })
|
|
31
|
+
|
|
32
|
+
logger.log('Logging something...')
|
|
33
|
+
expect(mockGlobal.logArgs).toBeFalsy()
|
|
34
|
+
|
|
35
|
+
logger.error('Logging something...')
|
|
36
|
+
expect(mockGlobal.errorArgs).toBeFalsy()
|
|
37
|
+
|
|
38
|
+
logger.warn('Logging something...')
|
|
39
|
+
expect(mockGlobal.warnArgs).toBeFalsy()
|
|
40
|
+
|
|
41
|
+
logger.info('Logging something...')
|
|
42
|
+
expect(mockGlobal.infoArgs).toBeFalsy()
|
|
43
|
+
|
|
44
|
+
logger.debug('Logging something...')
|
|
45
|
+
expect(mockGlobal.debugArgs).toBeFalsy()
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
test('adds a prefix to the logging methods according to loglevel', () => {
|
|
49
|
+
const { mockGlobal } = setup()
|
|
50
|
+
mockGlobal.LOGLEVEL = 'debug'
|
|
51
|
+
const logger = new Logger({ global: mockGlobal })
|
|
52
|
+
|
|
53
|
+
logger.log('Logging something...')
|
|
54
|
+
expect(mockGlobal.logArgs).toEqual(['[LOG]', 'Logging something...'])
|
|
55
|
+
|
|
56
|
+
logger.error('Logging something...')
|
|
57
|
+
expect(mockGlobal.errorArgs).toEqual(['[ERROR]', 'Logging something...'])
|
|
58
|
+
|
|
59
|
+
logger.warn('Logging something...')
|
|
60
|
+
expect(mockGlobal.warnArgs).toEqual(['[WARN]', 'Logging something...'])
|
|
61
|
+
|
|
62
|
+
logger.info('Logging something...')
|
|
63
|
+
expect(mockGlobal.infoArgs).toEqual(['[INFO]', 'Logging something...'])
|
|
64
|
+
|
|
65
|
+
logger.debug('Logging something...')
|
|
66
|
+
expect(mockGlobal.debugArgs).toEqual(['[DEBUG]', 'Logging something...'])
|
|
104
67
|
})
|
|
68
|
+
|
|
69
|
+
test('adds the provided logging context labels to its final output', () => {
|
|
70
|
+
const { mockGlobal } = setup()
|
|
71
|
+
mockGlobal.LOGLEVEL = 'debug'
|
|
72
|
+
const context = { correlationId: 'ABCD1234', interactor: 'Informer' }
|
|
73
|
+
const logger = new Logger({ global: mockGlobal, context })
|
|
74
|
+
|
|
75
|
+
logger.log('Logging something...')
|
|
76
|
+
expect(mockGlobal.logArgs).toEqual([
|
|
77
|
+
'[LOG]',
|
|
78
|
+
JSON.stringify({ correlationId: 'ABCD1234', interactor: 'Informer' }),
|
|
79
|
+
'Logging something...'])
|
|
80
|
+
|
|
81
|
+
logger.error('Logging something...')
|
|
82
|
+
expect(mockGlobal.errorArgs).toEqual([
|
|
83
|
+
'[ERROR]',
|
|
84
|
+
JSON.stringify({ correlationId: 'ABCD1234', interactor: 'Informer' }),
|
|
85
|
+
'Logging something...'])
|
|
86
|
+
|
|
87
|
+
logger.warn('Logging something...')
|
|
88
|
+
expect(mockGlobal.warnArgs).toEqual([
|
|
89
|
+
'[WARN]',
|
|
90
|
+
JSON.stringify({ correlationId: 'ABCD1234', interactor: 'Informer' }),
|
|
91
|
+
'Logging something...'])
|
|
92
|
+
|
|
93
|
+
logger.info('Logging something...')
|
|
94
|
+
expect(mockGlobal.infoArgs).toEqual([
|
|
95
|
+
'[INFO]',
|
|
96
|
+
JSON.stringify({ correlationId: 'ABCD1234', interactor: 'Informer' }),
|
|
97
|
+
'Logging something...'])
|
|
98
|
+
|
|
99
|
+
logger.debug('Logging something...')
|
|
100
|
+
expect(mockGlobal.debugArgs).toEqual([
|
|
101
|
+
'[DEBUG]',
|
|
102
|
+
JSON.stringify({ correlationId: 'ABCD1234', interactor: 'Informer' }),
|
|
103
|
+
'Logging something...'])
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
test('supports including static context labels', () => {
|
|
107
|
+
Logger.context = () => {
|
|
108
|
+
return { correlationId: 'ABCD1234' }
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const { mockGlobal } = setup()
|
|
112
|
+
mockGlobal.LOGLEVEL = 'debug'
|
|
113
|
+
const context = { model: 'Product' }
|
|
114
|
+
const logger = new Logger({ global: mockGlobal, context })
|
|
115
|
+
|
|
116
|
+
logger.info('Logging something...')
|
|
117
|
+
expect(mockGlobal.infoArgs).toEqual([
|
|
118
|
+
'[INFO]',
|
|
119
|
+
JSON.stringify({ correlationId: 'ABCD1234', model: 'Product' }),
|
|
120
|
+
'Logging something...'])
|
|
121
|
+
|
|
122
|
+
})
|