#ruby-on-rails #ruby #ruby-on-rails-3 #logging
#ruby-on-rails #ruby #ruby-on-rails-3 #ведение журнала
Вопрос:
Как мне заставить Rails печатать временные метки журнала в UTC вместо localtime? В настоящее время он печатает
Started GET "/" for 190.176.185.42 at 2013-08-21 18:27:56 -0400
Это упростит поиск ошибок, о которых сообщают пользователи. Я видел это http://apidock.com/rails/Logger и попробовал
production.rb
Rails.logger.datetime_format = "%Y-%m-%d %H:%M:%S %Z"
но это выдало ошибку
undefined method `datetime_format=' for nil:NilClass (NoMethodError)
Я не думаю, что простая настройка формата будет работать. Я думаю, что сначала мне нужно преобразовать время в UTC.
Rails 3.2.14.
Комментарии:
1. Проблема в том, что ваш регистратор
nil
. Почему это так?2. Я не знаю. Он находится в production.rb. Возможно, он еще не инициализирован. Где я должен разместить эту строку? Это правильная строка для использования?
3. Вероятно, это так, попробуйте сделать
Rails.logger = ActiveSupport::Logger.new('wherever_the_log_goes.log')
.
Ответ №1:
Эта строка журнала генерируется started_request_message
. Кажется, его трудно изменить, потому что он жестко запрограммирован на использование формата по умолчанию. Возможно, вам придется переопределить этот метод для ваших целей.
Ответ №2:
Да, это сработало! Используя информацию Yanhao в нижней части production.rb,
Rails::Rack::Logger.class_eval do
# Override logging to spit out UTC time to easier find user reported errors
# https://github.com/rails/rails/blob/v3.2.14/railties/lib/rails/rack/logger.rb#L38
def started_request_message(request)
'Started %s "%s" for %s at %s' % [
request.request_method,
request.filtered_path,
request.ip,
Time.now.utc ]
end
end