[NodeJS] 警告の発生場所が特定できない場合は、trace-warnings で実行しよう

TypeScript で TCP サーバーを構築していたのですが、MaxListenersExceededWarning のワーニングが
発生しており、原因が分からずにいました。

(node:1396) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGHUP listeners added. Use emitter.setMaxListeners() to increase limit

発生場所を特定する方法の1つに、--trace-warning オプションをつけて実行する方法があります。

d:\work\@node\tcpserver>node --trace-warnings build\PastDataDelete.js
(node:13644) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGHUP listeners added. Use emitter.setMaxListeners() to increase limit
    at _addListener (events.js:243:17)
    at process.addListener (events.js:259:10)
    at fileAppender (d:\work\@node\tcpserver\node_modules\log4js\lib\appenders\file.js:77:11)
    at Object.configure (d:\work\@node\tcpserver\node_modules\log4js\lib\appenders\file.js:88:10)
    at clustering.onlyOnMaster (d:\work\@node\tcpserver\node_modules\log4js\lib\appenders\index.js:59:27)
    at Object.onlyOnMaster (d:\work\@node\tcpserver\node_modules\log4js\lib\clustering.js:74:50)
    at createAppender (d:\work\@node\tcpserver\node_modules\log4js\lib\appenders\index.js:57:21)
    at Object.keys.forEach (d:\work\@node\tcpserver\node_modules\log4js\lib\appenders\index.js:73:25)
    at Array.forEach (<anonymous>)
    at setup (d:\work\@node\tcpserver\node_modules\log4js\lib\appenders\index.js:71:33)

これをみると、log4js まわりで発生しているように見えます。

私の場合の原因

私の場合は、log4js でのログファイル定義を、ログ出力の都度行っていたことが原因でした。

const log4js = require('log4js');
log4js.configure({
appenders : {
    app : {type : 'file', filename : "./log/app.log"}
},
categories : {
    default : {appenders : ['app'], level: 'debug'},
}
});
const logger = log4js.getLogger('app');

これを外に出して、問題解決でした。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です