Как удалить длинный хеш для Rails App в Heroku и Papertrailapp?
У меня есть приложение Rails 5 в Heroku, и я настроил учетную запись Papertrailapp, чтобы проверять журналы проще, чем проверять вручную в консоли через heroku logs -t
, И я люблю это. Но я чувствую, что там слишком много шума.
Раньше я активировал Rails-12-факторный гем, чтобы видеть журналы SQL в Heroku, но теперь они говорят, что с 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
Итак, я думаю, мои вопросы:
- Что это за хеш и как это полезно? Как убрать это из логов?
- Как мне удалить DateTime из журналов Rails (учитывая, что 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.
1 ответ
Длинный хэш request_id
, Этот идентификатор позволяет отслеживать один запрос в журнале. Вы можете удалить идентификатор путем редактирования config/environments/production.rb
:
config.log_tags = [ :request_id ]
Формат DateTime может быть установлен на что-то короткое в production.rb
хотя некоторые символы остаются:
config.log_formatter.datetime_format = ""
Для большего контроля над сообщением после стандартных деталей Heroku (согласно интерпретации Papertrail) вам понадобится специальный форматер журналов. По умолчанию используется Logger:: Formatter, как описано в руководстве по настройке 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
Обратите внимание, что этот пользовательский форматер упакован TaggedLogging
если RAILS_LOG_TO_STDOUT
установлена переменная окружения, которая по умолчанию установлена в Heroku.
Плохие последствия удаления предметов? При отладке сложных проблем всегда лучше получать больше информации - и многие умные люди разработали информацию журнала по умолчанию. Если вы работаете с более простым приложением, вы, вероятно, в порядке. В идеале программа просмотра журналов позволяет отключать элементы по своему усмотрению - и включать их снова, если отладка требует их. Papertrail делает что-то из этого: нажмите " Опции" внизу экрана, и вы можете отключить время, приложение и название программы.