-
Notifications
You must be signed in to change notification settings - Fork 1
/
logger.js
51 lines (45 loc) · 1.31 KB
/
logger.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
const createStdOutProcessor = require('./lib/processors/stdout')
const levels = require('./lib/levels')()
const createLogger = (scope, options) => {
if (!scope) throw new Error('You must provide a scope')
const { logLevel, processors, context } = {
context: {},
processors: [createStdOutProcessor(process.stdout)],
...options
}
const logger = {}
const write = (level, ...args) => {
const meta = {
date: new Date(),
pid: process.pid,
scope,
level,
...context
}
processors.forEach(processor => {
if (typeof processor === 'function') {
if (!logLevel || levels[level].rank < levels[logLevel].rank) return null
processor(meta, ...args)
} else if (
processor.processor &&
typeof processor.processor === 'function'
) {
if (
!logLevel ||
levels[level].rank < levels[processor.level || logLevel].rank
)
return null
processor.processor(meta, ...args)
}
})
}
Object.keys(levels).forEach(level => {
logger[level] = write.bind(null, level)
})
const setContext = context => {
return createLogger(scope, { ...options, context })
}
return { ...logger, setContext }
}
createLogger.createStdOutProcessor = createStdOutProcessor
module.exports = createLogger