ruby-on-rails - 如何获取当前请求的日志输出副本?
问题描述
在 Rails 4 应用程序中,在控制器操作中,我希望掌握当前请求期间创建的所有日志输出。我特别希望保留所有日志输出,无论设置了什么级别(即,如果记录器设置为不写入:debug
日志文件,那么我仍然希望日志输出具有:debug
交给我的级别)。
一种解决方案是使用before
过滤器对 进行monkeypatch Rails.logger
,即Rails.logger.extend(MyLoggerMemoryStoreWrapper)
,该包装器覆盖#add
记录器的方法,以收集数组中的任何日志输出以供最终使用。
但是有更好的方法吗?即,我可以用单线配置它的某种方式?Rails 中是否支持级联记录器或类似的东西?我无法更改实际日志记录发生的行(即,日志仍将被写入Rails.logger.info 'xyz'
等等)。
解决方案
您可以在应用程序设置中配置不同的记录器一次。该记录器所做的事情完全在您的控制范围内,因此它可以提供clear_buffer
和contents_of_buffer
方法,它可以在:debug
级别上操作,并且它可以选择在该缓冲区中记录消息并将它们传递给第二个记录器(可能配置为更高级别,并像往常一样写入文件)。