在生产服务器上修改每个请求的Rails日志记录级别



关于管理日志级别的信息太少了,所以我决定问这个问题来征求您的意见。

这个问题背后的动机是找出在不重新启动应用程序服务器的情况下在生产中设置日志级别的最佳方式。

我能想到的第一件事是在application_controller中放入一个方法,该方法将检查某些url参数(即log_level=debug)的存在,如果在请求的生命周期内存在,则转到该日志记录级别。

这有一个缺点,那就是你的用户或你必须修改url才能打开日志。另一个可能是,您进行的任何底层调用,即通过javascript调用到您的api,也需要意识到这一变化并传递此log_levelurl参数。

我可以考虑的另一件事是将一个名为debug_log_level或类似文件的文件放在Rails根目录中,然后在每次请求时开始检查该文件是否存在。当它这样做时,检查文件名是否实际包含有效的日志记录级别,当它打开该日志记录级别时

这种方法的缺点是,您可能在不同的框上有多个实例,因此您需要对每个框进行更改。

另一种可能是对数据库进行调用,并对文件进行相同的流。

或者,您可以为日志级别设置一个环境变量,并使用该变量来设置日志级别,但这需要重新启动应用程序服务器。

您是如何在生产环境中对此进行管理的?现在必须有一种更聪明的方法来做到这一点,是吗?

根据文档,您可以在环境初始化器(例如config/environments/production.rb)中设置日志级别,如下所示:

config.log_level = :warn

其中指定所需的日志级别而不是:warn

可用的日志级别为::debug、:info、:warn、:error、:fatal和:unknown,分别对应从0到5的日志级别编号。

如果需要在运行时指定日志级别,可以使用

Rails.logger.level = 0

最新更新