隐藏Rails日志中部分渲染的内容

22

我认为Rails在生产环境下的默认日志记录行为是不输出所有partials的渲染结果。这应该在开发环境下记录日志,但不应在生产环境下记录。

然而,我在生产环境中看到了这个问题,我不确定如何去除它。我的日志太嘈杂了。我的生产环境是运行Unicorn并使用Papertrail查看日志的Heroku。我知道Unicorn会对日志做一些奇怪的事情,为了让它们正常工作,我不得不在production.rb中添加以下内容:

  config.logger = Logger.new(STDOUT)
  config.logger.level = Logger.const_get('INFO')

( 在此解释:http://help.papertrailapp.com/kb/configuration/unicorn )

但即使使用log_level INFO,我仍然在所有日志中看到大量这些块:

Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_caption.html.erb (0.7ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_rights.html.erb (2.1ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_category.html.erb (4.8ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_caption.html.erb (0.3ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_rights.html.erb (0.4ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_category.html.erb (4.4ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_caption.html.erb (0.3ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_rights.html.erb (0.3ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_category.html.erb (1.8ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_caption.html.erb (0.4ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_rights.html.erb (4.6ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_category.html.erb (2.1ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_caption.html.erb (0.3ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_rights.html.erb (0.4ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_category.html.erb (4.1ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_caption.html.erb (0.2ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_rights.html.erb (1.8ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_category.html.erb (6.0ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_caption.html.erb (0.5ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_rights.html.erb (0.8ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_category.html.erb (1.9ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_caption.html.erb (0.3ms) 
Jun 25 22:15:15 tacktile app/web.1:    Rendered photos/pieces/_rights.html.erb (0.7ms) 

你执行过 heroku config:add LOG_LEVEL="info" 吗? - Deej
大卫,是的。我已经尝试将其设置为“debug”与“info”以确认详细程度的更改。确实如此。但即使在“info”级别下,我仍然会得到所有这些渲染语句。我相信我可以进一步降低它们并隐藏它们。但详细程度很棒,除了所有这些部分的“rendered”语句之外。我想找出如何只隐藏那些语句。 - Keith Schacht
请参考此答案:https://dev59.com/s2ct5IYBdhLWcg3wkuPE#12003652 - robd
5个回答

25

针对Rails 4(至少):

尝试在你的config/environments/development.rb中添加以下内容:

config.action_view.logger = nil

1
注意:这是一个“全盘否定”的选项——它不仅仅是隐藏部分视图日志。它会隐藏所有的视图日志。(这对于调试和尝试查看特定输出而不被视图日志冗长所淹没非常有用。) - Jon Kern

8
使用Lograge,可以去除局部渲染的时间。

1
稍微详细解释一下这个不完整/不准确的答案:Lograge是一个宝石,可以更改Rails的默认日志格式(即插即用)。它试图将所有相关信息(请求数据/控制器/时间等)都放入一行中,使用键值格式,而不是为每个请求记录大量不同的行。在此过程中,禁用/跳过了部分渲染日志记录,因为它被认为是非必要的(至少在生产系统上是如此)。所以,我确实同意这是重新格式化Rails日志的最佳方法,但它并不仅仅“删除部分的呈现时间”... - fgblomqvist
1
值得注意的是,lograge 更改了日志的顺序,这可能对某些人不理想。 - steel

3

与其完全禁用actionview日志记录(如另一个答案中所述),我选择更改呈现的日志级别为DEBUG。这样,通过将日志级别设置为INFO或更高级别,它可以轻松地从生产日志中省略。

请注意,这适用于Rails 5.2。 我不确定它是否适用于其他版本。

module ViewLoggingOverride
  def info(progname = nil, &block)
    logger.debug(progname, &block) if logger
  end
end

ActionView::LogSubscriber.include(ViewLoggingOverride)

相关的Rails代码:

https://github.com/rails/rails/blob/5-2-stable/actionview/lib/action_view/log_subscriber.rb

https://github.com/rails/rails/blob/5-2-stable/activesupport/lib/active_support/log_subscriber.rb#L93-L99


2
我从Papertrail获取了以下答案:

我认为最快解决这个问题的方法是使用我们的日志过滤功能。这将允许您删除与正则表达式匹配的任何内容,而不需要进行任何应用程序配置更改。

从长远来看,您可能希望在源头消除这些消息。对此,Lograge可能是您的最佳选择。您可能会发现它还可以删除一些其他部分,但请试试并告诉我您的想法。

我知道这对您目前可能不相关,但将来您可能还会发现其他有用的提示。其中包括lograge,删除静态资源请求和不必要的操作。

如果您需要任何上述提到的帮助,请告诉我。


1
这是非常常见的情况,在 Papertrail 发送通知您有日志峰值的电子邮件中,会提供一个包含此准确示例的链接。

这是链接

我稍微调整了正则表达式:

/\A\s{3}Rendered \w+\/_.+\.erb \(\d+\.\d+ms\)\z/

PS: 我一直觉得它们一开始就被打印在信息级别是很奇怪的。


我同意,“render” 应该是“DEBUG”级别。 - Jared Beck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接