Winston - MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏
Winston - MaxListenersExceededWarning: Possible EventEmitter memory leak detected
在使用 winston-daily-rotate-file 包进行文件日志记录时,winston 中出现以下错误,代码与 winston 控制台日志记录一起运行良好,
MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
at _addListener (events.js:256:17)
at DailyRotateFile.addListener (events.js:272:10)
at DailyRotateFile.once (events.js:301:8)
at asyncForEach (/home/ubuntumachine/Desktop/project/node_modules/winston/lib/winston/exception-handler.js:217:17)
at /home/ubuntumachine/Desktop/project/node_modules/async/internal/withoutIndex.js:9:16
at eachOfArrayLike (/home/ubuntumachine/Desktop/project/node_modules/async/eachOf.js:65:9)
at exports.default (/home/ubuntumachine/Desktop/project/node_modules/async/eachOf.js:9:5)
at eachLimit (/home/ubuntumachine/Desktop/project/node_modules/async/forEach.js:80:24)
at ExceptionHandler._uncaughtException (/home/ubuntumachine/Desktop/project/node_modules/winston/lib/winston/exception-handler.js:203:5)
at process.emit (events.js:198:13)
(node:20805) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 finish listeners added. Use emitter.setMaxListeners() to increase limit
at _addListener (events.js:256:17)
at DailyRotateFile.addListener (events.js:272:10)
at DailyRotateFile.once (events.js:301:8)
at asyncForEach (/home/ubuntumachine/Desktop/project/node_modules/winston/lib/winston/exception-handler.js:216:17)
at /home/ubuntumachine/Desktop/project/node_modules/async/internal/withoutIndex.js:9:16
at eachOfArrayLike (/home/ubuntumachine/Desktop/project/node_modules/async/eachOf.js:65:9)
at exports.default (/home/ubuntumachine/Desktop/project/node_modules/async/eachOf.js:9:5)
at eachLimit (/home/ubuntumachine/Desktop/project/node_modules/async/forEach.js:80:24)
at ExceptionHandler._uncaughtException (/home/ubuntumachine/Desktop/project/node_modules/winston/lib/winston/exception-handler.js:203:5)
at process.emit (events.js:198:13)
(node:20805) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 31 error listeners added. Use emitter.setMaxListeners() to increase limit
at _addListener (events.js:256:17)
at Console.addListener (events.js:272:10)
at Console.once (events.js:301:8)
at asyncForEach (/home/ubuntumachine/Desktop/project/node_modules/winston/lib/winston/exception-handler.js:217:17)
at /home/ubuntumachine/Desktop/project/node_modules/async/internal/withoutIndex.js:9:16
at eachOfArrayLike (/home/ubuntumachine/Desktop/project/node_modules/async/eachOf.js:65:9)
at exports.default (/home/ubuntumachine/Desktop/project/node_modules/async/eachOf.js:9:5)
at eachLimit (/home/ubuntumachine/Desktop/project/node_modules/async/forEach.js:80:24)
at ExceptionHandler._uncaughtException (/home/ubuntumachine/Desktop/project/node_modules/winston/lib/winston/exception-handler.js:203:5)
at process.emit (events.js:198:13)
试图将 max listeners 设置为无穷大,
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.setMaxListeners(Infinity);
仍然面临同样的问题。
我遇到了同样的问题,当我使用完记录器后调用 winstonLoggerInstance.clear()
解决了这个问题。 clear()
清除所有传输。
设置handleExceptions: false
如下图
createLogger({
level: 'info',
transports: [
new transports.Console({
format: format.combine(
format.colorize(),
format.simple(),
myFormat
),
handleExceptions: false
})
],
format: logFormat(label)
})
我遇到了一个相关案例,上面提到了标题警告,所以我只是与可能进入该主题的其他人分享我的调查见解:
- 为什么会弹出这个警告?嗯,this comment in this relevant thread解释的很好。简而言之:广泛使用传输。
- 如何禁用警告? 我发现很少有地方(如 this one)提供更新最大侦听器。他们使用
process.setMaxListeners(0);
,这与问题中使用的不同。
- 是否应该禁用警告? 我倾向于不(如 first comment in this thread 中所述)。
- 为什么 clear() 有帮助? 好吧,我没有读太多,但根据 documnation - 它删除了所有传输。
- 在其他什么情况下可能会发生此错误? - 当使用传输创建大量记录器实例时。我就是这样。
在使用 winston-daily-rotate-file 包进行文件日志记录时,winston 中出现以下错误,代码与 winston 控制台日志记录一起运行良好,
MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
at _addListener (events.js:256:17)
at DailyRotateFile.addListener (events.js:272:10)
at DailyRotateFile.once (events.js:301:8)
at asyncForEach (/home/ubuntumachine/Desktop/project/node_modules/winston/lib/winston/exception-handler.js:217:17)
at /home/ubuntumachine/Desktop/project/node_modules/async/internal/withoutIndex.js:9:16
at eachOfArrayLike (/home/ubuntumachine/Desktop/project/node_modules/async/eachOf.js:65:9)
at exports.default (/home/ubuntumachine/Desktop/project/node_modules/async/eachOf.js:9:5)
at eachLimit (/home/ubuntumachine/Desktop/project/node_modules/async/forEach.js:80:24)
at ExceptionHandler._uncaughtException (/home/ubuntumachine/Desktop/project/node_modules/winston/lib/winston/exception-handler.js:203:5)
at process.emit (events.js:198:13)
(node:20805) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 finish listeners added. Use emitter.setMaxListeners() to increase limit
at _addListener (events.js:256:17)
at DailyRotateFile.addListener (events.js:272:10)
at DailyRotateFile.once (events.js:301:8)
at asyncForEach (/home/ubuntumachine/Desktop/project/node_modules/winston/lib/winston/exception-handler.js:216:17)
at /home/ubuntumachine/Desktop/project/node_modules/async/internal/withoutIndex.js:9:16
at eachOfArrayLike (/home/ubuntumachine/Desktop/project/node_modules/async/eachOf.js:65:9)
at exports.default (/home/ubuntumachine/Desktop/project/node_modules/async/eachOf.js:9:5)
at eachLimit (/home/ubuntumachine/Desktop/project/node_modules/async/forEach.js:80:24)
at ExceptionHandler._uncaughtException (/home/ubuntumachine/Desktop/project/node_modules/winston/lib/winston/exception-handler.js:203:5)
at process.emit (events.js:198:13)
(node:20805) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 31 error listeners added. Use emitter.setMaxListeners() to increase limit
at _addListener (events.js:256:17)
at Console.addListener (events.js:272:10)
at Console.once (events.js:301:8)
at asyncForEach (/home/ubuntumachine/Desktop/project/node_modules/winston/lib/winston/exception-handler.js:217:17)
at /home/ubuntumachine/Desktop/project/node_modules/async/internal/withoutIndex.js:9:16
at eachOfArrayLike (/home/ubuntumachine/Desktop/project/node_modules/async/eachOf.js:65:9)
at exports.default (/home/ubuntumachine/Desktop/project/node_modules/async/eachOf.js:9:5)
at eachLimit (/home/ubuntumachine/Desktop/project/node_modules/async/forEach.js:80:24)
at ExceptionHandler._uncaughtException (/home/ubuntumachine/Desktop/project/node_modules/winston/lib/winston/exception-handler.js:203:5)
at process.emit (events.js:198:13)
试图将 max listeners 设置为无穷大,
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.setMaxListeners(Infinity);
仍然面临同样的问题。
我遇到了同样的问题,当我使用完记录器后调用 winstonLoggerInstance.clear()
解决了这个问题。 clear()
清除所有传输。
设置handleExceptions: false
如下图
createLogger({
level: 'info',
transports: [
new transports.Console({
format: format.combine(
format.colorize(),
format.simple(),
myFormat
),
handleExceptions: false
})
],
format: logFormat(label)
})
我遇到了一个相关案例,上面提到了标题警告,所以我只是与可能进入该主题的其他人分享我的调查见解:
- 为什么会弹出这个警告?嗯,this comment in this relevant thread解释的很好。简而言之:广泛使用传输。
- 如何禁用警告? 我发现很少有地方(如 this one)提供更新最大侦听器。他们使用
process.setMaxListeners(0);
,这与问题中使用的不同。 - 是否应该禁用警告? 我倾向于不(如 first comment in this thread 中所述)。
- 为什么 clear() 有帮助? 好吧,我没有读太多,但根据 documnation - 它删除了所有传输。
- 在其他什么情况下可能会发生此错误? - 当使用传输创建大量记录器实例时。我就是这样。