我已经尝试过实例化和关闭 winston 记录器,如https://github.com/flatiron/winston#instantiating-your-own-logger上描述的(一半) ,但无济于事。我在关闭 Winston 的文件传输时遇到了麻烦 - 浏览它的源代码,我发现关闭记录器的正确方法似乎是close
方法。我希望这能够关闭记录器使用的传输文件——但事实并非如此。
根据 node.js 服务器负载的频率变化,winston 仍会保留许多传输文件,在close
为它们调用方法后无限长的时间,在没有新的写入启动后无限长的时间。我通过 node.js 进程文件描述符表 ( lsof -p
) 观察到这一点。即使close
调用了 Winston 记录器,它也会无限期地保持日志文件的文件描述符“正在使用”,即日志文件永远不会真正关闭。因此,在我的应用程序运行很长时间后,文件描述符泄漏并最终使 node.js 进程遇到了 ulimit (-n) 限制。
是否应该有一个特定的编程模式来排空 Winston 记录器,以便最终关闭它?