1

我在 Heroku 中有一个 Rails 5 应用程序,并设置了一个 Papertrailapp 帐户来检查日志,这比通过heroku logs -t. 我很喜欢它。但是我觉得噪音太大了。

在我曾经激活 Rails-12-factor gem 以便能够在 Heroku 中查看 SQL 日志之前,但现在他们说从 Rails 5 及更高版本开始不再需要它了。所以现在我看到了 SQL 没有问题,但它比以前更长。

Feb 24 20:38:59 myapp-staging app/web.1:  I, [2017-02-25T01:38:59.133806 #4]  INFO -- : [b2be3dbb-edb6-45f7-8686-d37304ad3782]   Rendered shared_partials/_head.html.slim (0.8ms)

这是我在 Papertrail 中看到的常见日志行的示例,因此我想了解其中的某些部分,并了解如何禁用其中的某些部分。

Feb 24 20:38:59                                   # Papertrail DateTime
myapp-staging                                     # Papertrail system
app/web.1:                                        # Heroku Dyno
I,                                                # I guess this comes from the "new" Rails-12-factor way of logging, INFO, DEBUG, and so on
[2017-02-25T01:38:59.133806 #4]                   # I guess it's the DateTime from Heroku server
INFO -- :                                         # Again, the type of log, but whole word. Rails generated?
[b2be3dbb-edb6-45f7-8686-d37304ad3782]            # This is a hash that IDK where it comes from, nor what it means and what is used for
Rendered shared_partials/_head.html.slim (0.8ms)  # The actual log message of Rails app

所以我想我的问题是:

  • 那个哈希是什么,它有什么用?如何从日志中删除它?
  • 如何从 Rails 日志中删除 DateTime(鉴于 Papertrailapp 已经给了我该信息)(这会带来什么不良后果?)
  • 如何删除I,已经存在的部分INFO --

更新 26-02

感谢@slothbear 的回答,I0 已经从控制台手动检查了日志heroku logs -t,我注意到 Papertrail Datetime 似乎实际上是Heroku DateTime的重新格式化,因为常规消息如下所示:

2017-02-26T18:00:09.976118+00:00                      # Heroku Datetime
app[web.1]:                                           # Heroku source[dyno]
I,                                                    # Type of log
[2017-02-26T18:00:09.976009 #4]                       # Rails Datetime
INFO -- :                                             # Again type of log
[a6612ea9-1a31-46d3-8c8d-7f93f971c379]                # Request ID
Rendered shared_partials/_top_card.html.slim (3.5ms)  # Actual Rails message

所以,知道 Heroku DateTime 会更难删除,我想我会删除 Rails DateTime,也可能是 RequestID。

4

1 回答 1

1

长哈希是request_id. 此 ID 允许您跟踪日志中的单个请求。您可以通过编辑删除 ID config/environments/production.rb

config.log_tags = [ :request_id ]

DateTime 格式可以设置为短 in production.rb,但仍保留一些字符:

config.log_formatter.datetime_format = ""

要在Heroku 标准部分(由 Papertrail 解释)之后对消息进行更多控制,您需要一个自定义日志格式化程序。生产默认值为 Logger::Formatter,如配置 Rails 应用程序指南中所述。您可以在以下位置替换默认记录器production.rb

# config.log_formatter = ::Logger::Formatter.new

class UnmultiFormatter < ::Logger::Formatter
  def call(severity, time, progname, msg)
    "unmultilog [#{severity}]: #{msg}\n"
  end
end

config.log_formatter = UnmultiFormatter.new

请注意,TaggedLogging如果RAILS_LOG_TO_STDOUT设置了环境变量,则此自定义格式化程序会被包装——这是 Heroku 上默认设置的。

删除物品的不良后果?在调试复杂问题时,信息越多越好——默认日志信息是由许多聪明人设计的。如果您使用的是更简单的应用程序,您可能没问题。理想情况下,日志查看器可以让您根据需要关闭项目——并在调试需要时重新打开它们。Papertrail 做了一些这样的事情:单击屏幕底部的选项,您可以关闭时间、应用程序和程序名称。

于 2017-02-25T22:46:52.857 回答