如何在 Heroku 和 Papertrailapp 中删除 Rails App 的长散列?

How to remove long hash for Rails App in Heroku and Papertrailapp?

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

之前我曾经激活 Rails-12-factor gem 以便能够在 Heroku 中看到 SQL 日志,但现在 they say 来自 Rails 5 及以上不再需要它。所以现在我看到了 SQL w/out 问题,但它比以前更长了。

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

所以我想我的问题是:

更新 26-02

多亏了@slothbear 的回答,我已经手动检查了来自控制台的日志 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。

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

来删除 ID

config.log_tags = [ :request_id ]

production.rb 中可以将日期时间格式设置为较短的格式,但仍保留一些字符:

config.log_formatter.datetime_format = ""

Heroku-standard parts (as interpreted by Papertrail) you need a custom log formatter. The production default is Logger::Formatter, as described in the Configuring Rails Applications 后为更多控制留言的指南。您可以替换 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

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

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