https://github.com/flatiron/winston#instantiating-your-own-loggerで(半分) 説明されているように、winston ロガーのインスタンス化とクローズを試しましたが、役に立ちませんでした。Winston のファイル トランスポートを閉じる際に問題が発生しました。そのソース コードを調べてみると、ロガーを閉じる適切な方法がそのclose
方法のように思われます。これにより、ロガーが使用するトランスポート ファイルを閉じることができると期待していましたが、そうではないことが判明しました。
node.js サーバーの負荷によって頻度が異なりますが、winston は、close
メソッドが呼び出されてから無限に長い間、それらへの新しい書き込みが開始されなくなってからも無限に長い間、まだ多くのトランスポート ファイルを保持していました。node.js プロセス ファイル記述子テーブル ( lsof -p
) で確認しました。が Winston ロガーに対して呼び出されたとしてもclose
、ログ ファイルのファイル記述子を無期限に「使用中」のままにします。つまり、ログ ファイルが実際に閉じられることはありません。したがって、ファイル記述子がリークし、アプリケーションが長時間稼働した後、最終的に node.js プロセスが ulimit (-n) 制限にぶつかります。
最終的に閉じることができるように Winston ロガーを排出するための特定のプログラミング パターンが必要ですか?