我已尝试将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记录器,以便它最终可以关闭?
答案 0 :(得分:1)
仅创建一个记录器实例,然后从中派生子项。在这种情况下,winston 将只保存一个打开的文件处理程序。性能也可能更好。
答案 1 :(得分:0)
这只是一个建议而且我没有自己尝试 - 但我看到你没有得到任何其他答案 - 所以有什么危害......
它在这里说: https://github.com/flatiron/winston#file-transport
您可以提供写入流而不是文件路径。那你为什么不亲自管理文件,什么时候关闭 - 关闭记录器然后关闭文件句柄?