我要完成的工作:通过检测是否已保存对配置文件的更改来更新节点微服务上的日志记录级别,而无需重新启动该服务。
原因:工作政策要求根据更改内容获得不同程度的批准。更新配置文件是“标准更改”(被认为是“安全”,需要完成很少的仪式。)更改配置文件并重新启动服务是“正常更改”(考虑为“不安全”,需要获得vp批准)。此功能将大大有助于我们改进服务的日志记录。
技术挑战:似乎node-config和bunyan都需要重新启动才能接受更改。提交问题之前尝试进行适当研究的结果:Live updating Node.js serverCan node-config reload configurations without restarting Node?(上一篇文章提供了适用于某人的解决方案,但我无法使其正常工作。)从理论上讲,我应该能够使用以下行删除两个应用程序级对象:
删除require.cache [require.resolve('config')];删除require.cache [require.resolve('logging')];
,然后使用从更改后的配置文件中读取的新配置重新创建两个对象。删除配置和日志记录对象可能会起作用,但是我仍然是一个节点nube,因此,尝试使用此神奇行的所有方式对我而言都是失败的。(注意:我能够删除无法重新创建的对象,而我的代码将使用新创建的对象。)
我正在做的事情的丑陋尝试可在我的github的“ spike_LiveUpdate”目录中找到:https://github.com/MalcolmAnderson/uService_stub
我们唯一要更改的是应用程序的日志级别,因此,如果需要,我们可以:在短短几分钟内将日志记录级别“反弹至11”,让用户证明自己的错误,并将其恢复到正常的日志记录级别。
[您希望对应用程序中发生的事情有更好的了解,但是我们无法证明您提出的风险是合理的。“)撰写问题之前的研究:尝试解决问题。搜索“节点实时更新”,“节点实时配置更新”,“节点无重新启动配置更改”搜索以上内容,但将“实时更新”替换为“滚动更新”(这获得了很多Kubernetes的成功,这也许是我必须采用的方式。)
底线:尝试能够在不重新启动的情况下更改Node-config和Bunyan日志记录。[据我所知,出于安全原因,不允许实时更新。]
据此,我可以建议几种方法。