Total Complexity | 4 |
Complexity/F | 1 |
Lines of Code | 36 |
Function Count | 4 |
Duplicated Lines | 0 |
Ratio | 0 % |
Changes | 0 |
1 | /* eslint-disable promise/prefer-await-to-callbacks */ |
||
2 | import os from 'os'; |
||
3 | import Transport from 'winston-transport'; |
||
4 | import { isLoggable } from './utils/common'; |
||
5 | import { defaultLogger, defaultSanitizer, defaultMaxListeners } from './defaults'; |
||
6 | import { MESSAGE, LEVEL } from './constants'; |
||
7 | |||
8 | export default class Console extends Transport { |
||
9 | constructor(options = {}) { |
||
10 | super(options); |
||
11 | this.name = options.name || 'console'; |
||
12 | this.eol = options.eol || os.EOL; |
||
13 | this.logger = options.logger || console; |
||
14 | this.fallBackLogger = options.fallBackLogger || defaultLogger; |
||
15 | this.handlers = options.levels || {}; |
||
16 | this.sanitizer = options.sanitizer || defaultSanitizer; |
||
17 | this.setMaxListeners(options.maxListeners || defaultMaxListeners); |
||
18 | } |
||
19 | |||
20 | log(info, callback) { |
||
21 | setImmediate(() => { |
||
22 | this.emit('logged', info); |
||
23 | }); |
||
24 | const level = info[LEVEL]; |
||
25 | const message = info[MESSAGE]; |
||
26 | |||
27 | const log = [ |
||
28 | this.handlers[level], |
||
29 | this.logger[this.handlers[level]], |
||
30 | this.logger[level], |
||
31 | this.fallBackLogger |
||
32 | ].find((element) => isLoggable(element)); |
||
33 | |||
34 | log(this.sanitizer(message)); |
||
35 | callback(); |
||
36 | } |
||
37 | } |
||
38 |