standard-log 6.3.1 → 7.0.0
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/dist/standard-log.js +12 -2
- package/dist/standard-log.js.gz +0 -0
- package/dist/standard-log.js.map +1 -1
- package/dist/standard-log.js.map.gz +0 -0
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +10 -2
- package/lib/config.js.map +1 -1
- package/lib/configForTest.d.ts.map +1 -1
- package/lib/configForTest.js +2 -0
- package/lib/configForTest.js.map +1 -1
- package/libm/config.d.ts.map +1 -1
- package/libm/config.js +10 -2
- package/libm/config.js.map +1 -1
- package/libm/configForTest.d.ts.map +1 -1
- package/libm/configForTest.js +2 -0
- package/libm/configForTest.js.map +1 -1
- package/package.json +2 -2
- package/src/config.spec.ts +12 -4
- package/src/config.ts +10 -2
- package/src/configForTest.ts +2 -0
- package/src/console/createConsoleLogReporter.spec.ts +135 -127
- package/src/logReporter.spec.ts +78 -67
- package/src/memory/MemoryLogReporter.spec.ts +79 -74
package/src/logReporter.spec.ts
CHANGED
|
@@ -1,88 +1,99 @@
|
|
|
1
|
-
import a from 'assertron'
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import a from 'assertron'
|
|
2
|
+
import {
|
|
3
|
+
addLogReporter, clearLogReporters, config,
|
|
4
|
+
createConsoleLogReporter, createMemoryLogReporter,
|
|
5
|
+
getConsoleReporter, getLogReporter, hasConsoleReporter,
|
|
6
|
+
LogFilter, logLevels, ProhibitedDuringProduction
|
|
7
|
+
} from '.'
|
|
8
|
+
import { store } from './store'
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
store.reset()
|
|
11
|
-
config({ mode: 'test' })
|
|
12
|
-
})
|
|
10
|
+
describe('production checks', () => {
|
|
11
|
+
beforeEach(() => store.reset())
|
|
13
12
|
|
|
14
|
-
describe('addLogReporter()', () => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
describe('addLogReporter()', () => {
|
|
14
|
+
test('throws in production mode', () => {
|
|
15
|
+
config({ mode: 'production' })
|
|
16
|
+
const reporter = createMemoryLogReporter()
|
|
17
|
+
a.throws(() => addLogReporter(reporter), ProhibitedDuringProduction)
|
|
18
|
+
})
|
|
19
19
|
})
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
describe('clearLogReporters()', () => {
|
|
22
|
+
test('throws in production mode', () => {
|
|
23
|
+
config({ mode: 'production' })
|
|
24
|
+
a.throws(() => clearLogReporters(), ProhibitedDuringProduction)
|
|
25
|
+
})
|
|
26
|
+
})
|
|
27
|
+
})
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
describe('unit tests', () => {
|
|
30
|
+
beforeEach(() => {
|
|
31
|
+
store.reset()
|
|
32
|
+
config({ mode: 'test' })
|
|
27
33
|
})
|
|
28
34
|
|
|
29
|
-
describe('
|
|
30
|
-
test('
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
expect(getLogReporter('console')).toBeDefined()
|
|
35
|
-
})
|
|
35
|
+
describe('addLogReporter()', () => {
|
|
36
|
+
test('adds log reporter', () => {
|
|
37
|
+
const count = store.value.reporters.length
|
|
38
|
+
const reporter = createMemoryLogReporter()
|
|
39
|
+
addLogReporter(reporter)
|
|
36
40
|
|
|
37
|
-
|
|
38
|
-
const filter: LogFilter = entry => entry.level < logLevels.alert
|
|
39
|
-
addLogReporter(createConsoleLogReporter({ id: 'c2', filter }))
|
|
40
|
-
addLogReporter(createConsoleLogReporter({ id: 'c3' }))
|
|
41
|
-
const c3 = getConsoleReporter()!
|
|
42
|
-
expect(c3.filter).toBe(filter)
|
|
41
|
+
expect(store.value.reporters.length).toBe(count + 1)
|
|
43
42
|
})
|
|
44
43
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
})
|
|
53
|
-
})
|
|
44
|
+
describe('add another console reporter', () => {
|
|
45
|
+
test('will not replace existing one', () => {
|
|
46
|
+
expect(getLogReporter('console')).toBeDefined()
|
|
47
|
+
addLogReporter(createConsoleLogReporter({ id: 'c2' }))
|
|
48
|
+
expect(getLogReporter('c2')).toBeUndefined()
|
|
49
|
+
expect(getLogReporter('console')).toBeDefined()
|
|
50
|
+
})
|
|
54
51
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
test('will carry over existing filter', () => {
|
|
53
|
+
const filter: LogFilter = entry => entry.level < logLevels.alert
|
|
54
|
+
addLogReporter(createConsoleLogReporter({ id: 'c2', filter }))
|
|
55
|
+
addLogReporter(createConsoleLogReporter({ id: 'c3' }))
|
|
56
|
+
const c3 = getConsoleReporter()!
|
|
57
|
+
expect(c3.filter).toBe(filter)
|
|
58
|
+
})
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
test('will combine existing filter and new filter', () => {
|
|
61
|
+
addLogReporter(createConsoleLogReporter({ id: 'c2', filter: entry => entry.level > logLevels.critical }))
|
|
62
|
+
addLogReporter(createConsoleLogReporter({ id: 'c3', filter: entry => entry.level < logLevels.error }))
|
|
63
|
+
const c2 = getConsoleReporter()!
|
|
64
|
+
expect(c2.filter!({ level: logLevels.info } as any)).toBe(false)
|
|
65
|
+
expect(c2.filter!({ level: logLevels.alert } as any)).toBe(false)
|
|
66
|
+
})
|
|
67
|
+
})
|
|
62
68
|
})
|
|
63
|
-
})
|
|
64
69
|
|
|
65
|
-
describe('
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
70
|
+
describe('getLogReporter()', () => {
|
|
71
|
+
test('get log reporter by id', () => {
|
|
72
|
+
expect(getLogReporter('console')).toBeDefined()
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
test('get log reporter with unknown id gets undefined', () => {
|
|
76
|
+
expect(getLogReporter('blah')).toBeUndefined()
|
|
77
|
+
})
|
|
69
78
|
})
|
|
70
79
|
|
|
71
|
-
|
|
72
|
-
|
|
80
|
+
describe('clearLogReporters()', () => {
|
|
81
|
+
test('removes all reporters', () => {
|
|
82
|
+
clearLogReporters()
|
|
73
83
|
|
|
74
|
-
|
|
84
|
+
expect(store.value.reporters.length).toBe(0)
|
|
85
|
+
})
|
|
75
86
|
})
|
|
76
|
-
})
|
|
77
87
|
|
|
78
|
-
describe('hasConsoleReporter()', () => {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
88
|
+
describe('hasConsoleReporter()', () => {
|
|
89
|
+
test('returns true if there is a console reporter', () => {
|
|
90
|
+
expect(hasConsoleReporter()).toBeTruthy()
|
|
91
|
+
})
|
|
92
|
+
test('returns false if there is no console reporter', () => {
|
|
93
|
+
clearLogReporters()
|
|
94
|
+
expect(hasConsoleReporter()).toBeFalsy()
|
|
95
|
+
addLogReporter(createMemoryLogReporter())
|
|
96
|
+
expect(hasConsoleReporter()).toBeFalsy()
|
|
97
|
+
})
|
|
87
98
|
})
|
|
88
99
|
})
|
|
@@ -2,97 +2,102 @@ import a from 'assertron'
|
|
|
2
2
|
import { config, createMemoryLogReporter, logLevels, ProhibitedDuringProduction } from '..'
|
|
3
3
|
import { store } from '../store'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
store.reset()
|
|
7
|
-
|
|
8
|
-
})
|
|
9
|
-
|
|
10
|
-
const reporter = createMemoryLogReporter()
|
|
11
|
-
const entry = { id: 'log', level: 1, args: ['some messages'], timestamp: new Date() }
|
|
12
|
-
reporter.write(entry)
|
|
13
|
-
expect(reporter.logs).toEqual([entry])
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
test('can override id', () => {
|
|
17
|
-
const reporter = createMemoryLogReporter({ id: 'custom-id-mem' })
|
|
18
|
-
expect(reporter.id).toBe('custom-id-mem')
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
test('can filter', () => {
|
|
22
|
-
const reporter = createMemoryLogReporter({ filter(entry) { return entry.id !== 'secret' } })
|
|
23
|
-
reporter.write({ id: 'ok', level: 1, args: ['some messages'], timestamp: new Date() })
|
|
24
|
-
reporter.write({ id: 'secret', level: 1, args: ['some messages'], timestamp: new Date() })
|
|
25
|
-
expect(reporter.logs.length).toBe(1)
|
|
26
|
-
})
|
|
5
|
+
describe('production checks', () => {
|
|
6
|
+
beforeEach(() => store.reset())
|
|
7
|
+
test('set formatter in production mode throws', () => {
|
|
8
|
+
config({ mode: 'production' })
|
|
9
|
+
const reporter = createMemoryLogReporter()
|
|
27
10
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const filter = reporter.filter
|
|
31
|
-
reporter.filter = entry => entry.id !== 'secret'
|
|
32
|
-
expect(reporter.filter).not.toEqual(filter)
|
|
33
|
-
})
|
|
11
|
+
a.throws(() => { reporter.formatter = e => e }, ProhibitedDuringProduction)
|
|
12
|
+
})
|
|
34
13
|
|
|
35
|
-
test('set filter in production mode throws', () => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
14
|
+
test('set filter in production mode throws', () => {
|
|
15
|
+
config({ mode: 'production' })
|
|
16
|
+
const reporter = createMemoryLogReporter()
|
|
17
|
+
a.throws(() => { reporter.filter = () => true }, ProhibitedDuringProduction)
|
|
18
|
+
})
|
|
39
19
|
})
|
|
40
20
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
21
|
+
describe('unit tests', () => {
|
|
22
|
+
beforeEach(() => {
|
|
23
|
+
store.reset()
|
|
24
|
+
config({ mode: 'test' })
|
|
25
|
+
})
|
|
26
|
+
test('log entries are saved in the `logs` property', () => {
|
|
27
|
+
const reporter = createMemoryLogReporter()
|
|
28
|
+
const entry = { id: 'log', level: 1, args: ['some messages'], timestamp: new Date() }
|
|
29
|
+
reporter.write(entry)
|
|
30
|
+
expect(reporter.logs).toEqual([entry])
|
|
47
31
|
})
|
|
48
32
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
})
|
|
33
|
+
test('can override id', () => {
|
|
34
|
+
const reporter = createMemoryLogReporter({ id: 'custom-id-mem' })
|
|
35
|
+
expect(reporter.id).toBe('custom-id-mem')
|
|
36
|
+
})
|
|
54
37
|
|
|
55
|
-
test('can
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
})
|
|
38
|
+
test('can filter', () => {
|
|
39
|
+
const reporter = createMemoryLogReporter({ filter(entry) { return entry.id !== 'secret' } })
|
|
40
|
+
reporter.write({ id: 'ok', level: 1, args: ['some messages'], timestamp: new Date() })
|
|
41
|
+
reporter.write({ id: 'secret', level: 1, args: ['some messages'], timestamp: new Date() })
|
|
42
|
+
expect(reporter.logs.length).toBe(1)
|
|
43
|
+
})
|
|
61
44
|
|
|
62
|
-
test('
|
|
63
|
-
|
|
64
|
-
|
|
45
|
+
test('can change filter', () => {
|
|
46
|
+
const reporter = createMemoryLogReporter()
|
|
47
|
+
const filter = reporter.filter
|
|
48
|
+
reporter.filter = entry => entry.id !== 'secret'
|
|
49
|
+
expect(reporter.filter).not.toEqual(filter)
|
|
50
|
+
})
|
|
65
51
|
|
|
66
|
-
|
|
67
|
-
|
|
52
|
+
test('formatter can be used to pre-process the log', () => {
|
|
53
|
+
const reporter = createMemoryLogReporter({
|
|
54
|
+
formatter: (entry) => ({
|
|
55
|
+
...entry,
|
|
56
|
+
args: entry.args.map(arg => arg === 'secret' ? '<censored>' : arg)
|
|
57
|
+
})
|
|
58
|
+
})
|
|
68
59
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const reporter = createMemoryLogReporter()
|
|
60
|
+
const entry = { id: 'log', level: 1, args: ['a', 'secret', 'b'], timestamp: new Date() }
|
|
61
|
+
reporter.write(entry)
|
|
72
62
|
|
|
73
|
-
expect(reporter.
|
|
63
|
+
expect(reporter.logs[0].args[1]).toBe('<censored>')
|
|
74
64
|
})
|
|
75
65
|
|
|
76
|
-
test('
|
|
66
|
+
test('can change formatter', () => {
|
|
77
67
|
const reporter = createMemoryLogReporter()
|
|
78
|
-
const
|
|
79
|
-
reporter.
|
|
80
|
-
expect(reporter.
|
|
68
|
+
const formatter = reporter.formatter
|
|
69
|
+
reporter.formatter = e => ({ ...e, args: e.args.reverse() })
|
|
70
|
+
expect(reporter.formatter).not.toEqual(formatter)
|
|
81
71
|
})
|
|
82
72
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
73
|
+
describe('getLogMessages()', () => {
|
|
74
|
+
test('empty logs returns empty string', () => {
|
|
75
|
+
const reporter = createMemoryLogReporter()
|
|
76
|
+
|
|
77
|
+
expect(reporter.getLogMessage()).toEqual('')
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
test('print args', () => {
|
|
81
|
+
const reporter = createMemoryLogReporter()
|
|
82
|
+
const entry = { id: 'log', level: 1, args: ['miku', 'is', 'singing'], timestamp: new Date() }
|
|
83
|
+
reporter.write(entry)
|
|
84
|
+
expect(reporter.getLogMessage()).toEqual('miku is singing')
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
test('print object arg', () => {
|
|
88
|
+
const reporter = createMemoryLogReporter()
|
|
89
|
+
const entry = { id: 'log', level: 1, args: [{ 'miku': 'sing' }], timestamp: new Date() }
|
|
90
|
+
reporter.write(entry)
|
|
91
|
+
expect(reporter.getLogMessage()).toEqual("{ miku: 'sing' }")
|
|
92
|
+
})
|
|
88
93
|
})
|
|
89
|
-
})
|
|
90
94
|
|
|
91
|
-
describe('getLogMessageWithLevel', () => {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
describe('getLogMessageWithLevel', () => {
|
|
96
|
+
test('print with level', () => {
|
|
97
|
+
const reporter = createMemoryLogReporter()
|
|
98
|
+
reporter.write({ id: 'log', level: logLevels.info, args: ['msg 1'], timestamp: new Date() })
|
|
99
|
+
reporter.write({ id: 'log', level: logLevels.warn, args: ['msg 2'], timestamp: new Date() })
|
|
100
|
+
expect(reporter.getLogMessageWithLevel()).toEqual(`(INFO) msg 1\n(WARN) msg 2`)
|
|
101
|
+
})
|
|
97
102
|
})
|
|
98
103
|
})
|