Skip to content

Commit 282065b

Browse files
committed
feat(logger): add log method for all levels
1 parent caa1202 commit 282065b

File tree

2 files changed

+84
-3
lines changed

2 files changed

+84
-3
lines changed

spec/logger.spec.ts

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1-
import { describe, expect, it } from 'vitest'
1+
import { describe, expect, expectTypeOf, it, vi } from 'vitest'
22
import Base from '../src/base.js'
3-
import { loggerDecorator } from '../src/logger.js'
3+
import {
4+
getLogLevel,
5+
loggerDecorator,
6+
LogLevel,
7+
LogLevelStrings
8+
} from '../src/logger.js'
49

510
describe('logger', () => {
611
it('has a logger property', () => {
@@ -39,4 +44,56 @@ describe('logger', () => {
3944
})
4045
})
4146
})
47+
48+
describe('logLevels', () => {
49+
it.each(['verbose', 'debug', 'info', 'warn', 'error'])(
50+
`has a %s method`,
51+
(level) => {
52+
class Test extends Base {}
53+
loggerDecorator()(Test)
54+
const instance = new Test()
55+
expect(instance.logger).toHaveProperty(level)
56+
expect(instance.logger[level]).toBeInstanceOf(Function)
57+
}
58+
)
59+
60+
it('should log a message at the specified level', () => {
61+
class Test extends Base {
62+
hello() {
63+
this.logger.debug('hello')
64+
}
65+
}
66+
67+
loggerDecorator('test', { level: 'debug' })(Test)
68+
const testInstance = new Test()
69+
const consoleSpy = vi.spyOn(console, 'debug')
70+
testInstance.hello()
71+
expect(consoleSpy).toHaveBeenCalledOnce()
72+
})
73+
74+
it('should not log a message at a lower level', () => {
75+
class Test extends Base {
76+
hello() {
77+
this.logger.debug('hello')
78+
}
79+
}
80+
81+
loggerDecorator('test', { level: 'error' })(Test)
82+
const testInstance = new Test()
83+
const consoleSpy = vi.spyOn(console, 'debug')
84+
testInstance.hello()
85+
expect(consoleSpy).not.toHaveBeenCalled()
86+
})
87+
})
88+
})
89+
90+
describe('getLogLevel', () => {
91+
it.each(['verbose', 'debug', 'info', 'warn', 'error'])(
92+
'returns the correct log level for %s',
93+
(level) => {
94+
expect(getLogLevel(level as LogLevelStrings)).toBe(
95+
LogLevel[level.toUpperCase() as keyof typeof LogLevel]
96+
)
97+
}
98+
)
4299
})

src/logger.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,29 @@ function Logger(
3030
level: options.level
3131
}
3232

33+
Object.assign(logger, {
34+
verbose(...args: any[]) {
35+
if (getLogLevel(logger.level) <= LogLevel.VERBOSE)
36+
console.log(`[${name}] - `, ...args)
37+
},
38+
debug(...args: any[]) {
39+
if (getLogLevel(logger.level) <= LogLevel.DEBUG)
40+
console.debug(`[${name}] - `, ...args)
41+
},
42+
info(...args: any[]) {
43+
if (getLogLevel(logger.level) <= LogLevel.INFO)
44+
console.info(`[${name}] - `, ...args)
45+
},
46+
warn(...args: any[]) {
47+
if (getLogLevel(logger.level) <= LogLevel.WARN)
48+
console.warn(`[${name}] - `, ...args)
49+
},
50+
error(...args: any[]) {
51+
if (getLogLevel(logger.level) <= LogLevel.ERROR)
52+
console.error(`[${name}] - `, ...args)
53+
}
54+
})
55+
3356
Object.defineProperty(target.prototype, 'logger', {
3457
value: logger
3558
})
@@ -39,4 +62,5 @@ function Logger(
3962
const loggerDecorator = Logger
4063

4164
export default Logger
42-
export { LogLevel, loggerDecorator }
65+
export { LogLevel, loggerDecorator, getLogLevel }
66+
export type { LogLevelStrings }

0 commit comments

Comments
 (0)