|
1 | 1 | const Promise = require('bluebird'); |
2 | 2 | const redislock = require('ioredis-lock'); |
3 | 3 | const Redis = require('ioredis'); |
4 | | -const bunyan = require('bunyan'); |
| 4 | +const pino = require('pino'); |
5 | 5 | const assert = require('assert'); |
6 | 6 |
|
7 | 7 | // may only use redis with bluebird promise |
@@ -40,9 +40,9 @@ const isTimeoutError = (e) => e === TimeoutError; |
40 | 40 | * @param {Number} timeout - defaults to 10000 |
41 | 41 | * @param {Number} retries - defaults to 0 |
42 | 42 | * @param {Number} delay - defaults to 100 |
43 | | - * @param {Object|Boolean} log: sets up logger. If set to false supresses all warnings |
44 | | - * @param {String} name: name to use when reporting |
45 | | - * @param {String|Object} preset - either name of preset or streams obj for bunyan |
| 43 | + * @param {Pino|Boolean} [log] sets up logger. If set to false supresses all warnings |
| 44 | + * @param {String} [name] name to use when reporting |
| 45 | + * @param {Boolean} [debug=false] show additional diagnostic information |
46 | 46 | * @param {String} lockPrefix - used for creating locks in redis |
47 | 47 | */ |
48 | 48 | class DistributedCallbackQueue { |
@@ -82,31 +82,30 @@ class DistributedCallbackQueue { |
82 | 82 | this.logger.info('Initialized...'); |
83 | 83 | } |
84 | 84 |
|
| 85 | + static isCompatibleLogger(logger) { |
| 86 | + for (const level of ['debug', 'info', 'warn', 'error', 'fatal'].values()) { |
| 87 | + if (typeof logger[level] !== 'function') { |
| 88 | + return false; |
| 89 | + } |
| 90 | + } |
| 91 | + |
| 92 | + return true; |
| 93 | + } |
| 94 | + |
85 | 95 | static initLogger(options) { |
86 | 96 | const { log: logger, debug, name } = options; |
87 | 97 | const loggerEnabled = typeof logger === 'undefined' ? !!debug : logger; |
88 | 98 |
|
89 | | - if (loggerEnabled && logger instanceof bunyan) { |
| 99 | + if (loggerEnabled && DistributedCallbackQueue.isCompatibleLogger(logger)) { |
90 | 100 | return logger; |
91 | 101 | } |
92 | 102 |
|
93 | | - const streams = [{ |
94 | | - level: 'trace', |
95 | | - type: 'raw', |
96 | | - stream: new bunyan.RingBuffer({ limit: 100 }), |
97 | | - }]; |
98 | | - |
| 103 | + let level = 'silent'; |
99 | 104 | if (loggerEnabled) { |
100 | | - streams.push({ |
101 | | - stream: process.stdout, |
102 | | - level: debug ? 'debug' : 'info', |
103 | | - }); |
| 105 | + level = debug ? 'debug' : 'info'; |
104 | 106 | } |
105 | 107 |
|
106 | | - return bunyan.createLogger({ |
107 | | - name: name || pkg.name, |
108 | | - streams, |
109 | | - }); |
| 108 | + return pino({ name: name || pkg.name, level }, pino.destination(1)); |
110 | 109 | } |
111 | 110 |
|
112 | 111 | /** |
@@ -415,7 +414,7 @@ class DistributedCallbackQueue { |
415 | 414 | await lock.extend(); |
416 | 415 | } catch (error) { |
417 | 416 | // because a job may take too much time, other listeners must implement timeout/retry strategy |
418 | | - this.logger.warn('failed to release lock and publish results', error); |
| 417 | + this.logger.warn({ err: error }, 'failed to release lock and publish results'); |
419 | 418 | return null; |
420 | 419 | } |
421 | 420 |
|
|
0 commit comments