如何在 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
所以我想我的问题是:
- 那个散列是什么,它有什么用?如何从日志中删除它?
- 如何从 Rails 日志中删除 DateTime(鉴于 Papertrailapp 已经向我提供了该信息)(这会带来什么不良后果?)
- 如何删除已经在
INFO --
中的 I,
部分
更新 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 会做一些这样的事情:点击屏幕底部的 选项 ,您可以关闭时间、应用程序和程序名称。
我在 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
所以我想我的问题是:
- 那个散列是什么,它有什么用?如何从日志中删除它?
- 如何从 Rails 日志中删除 DateTime(鉴于 Papertrailapp 已经向我提供了该信息)(这会带来什么不良后果?)
- 如何删除已经在
INFO --
中的
I,
部分
更新 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
:
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 会做一些这样的事情:点击屏幕底部的 选项 ,您可以关闭时间、应用程序和程序名称。