如何以UTC时区生成Rails日志时间戳?

时间:2014-06-23 23:05:13

标签: ruby-on-rails ruby ruby-on-rails-3 logging

如何让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。

2 个答案:

答案 0 :(得分:2)

该行日志由started_request_message生成。似乎很难改变它,因为硬编码使用默认格式。也许你必须为你的目的覆盖这个方法。

答案 1 :(得分:1)

是的,它有效!使用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