Ruby on rails 如何在UTC时区中创建Rails日志时间戳?
如何使Rails以UTC而不是本地时间打印日志时间戳?它目前正在打印Ruby on rails 如何在UTC时区中创建Rails日志时间戳?,ruby-on-rails,ruby,ruby-on-rails-3,logging,Ruby On Rails,Ruby,Ruby On Rails 3,Logging,如何使Rails以UTC而不是本地时间打印日志时间戳?它目前正在打印 Started GET "/" for 190.176.185.42 at 2013-08-21 18:27:56 -0400 这将更容易找到用户报告的错误。我看到这个,试了试 production.rb 但它给出了一个错误 undefined method `datetime_format=' for nil:NilClass (NoMethodError) 我认为仅仅设置格式是行不通的。我想我需要先
Started GET "/" for 190.176.185.42 at 2013-08-21 18:27:56 -0400
这将更容易找到用户报告的错误。我看到这个,试了试
production.rb
但它给出了一个错误
undefined method `datetime_format=' for nil:NilClass (NoMethodError)
我认为仅仅设置格式是行不通的。我想我需要先把时间转换成UTC
Rails 3.2.14.该行日志由生成。似乎很难更改它,因为它是硬编码的,使用默认格式。也许你必须为了你的目的重写这个方法。是的,它成功了!使用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
问题是您的记录器是
nil
。为什么?我不知道。它正在生产中。也许它还没有初始化。我应该把那条线放在哪里?这是要使用的正确行吗?可能是这样,请尝试执行Rails.logger=ActiveSupport::logger.new('where\u log\u goes.log')
。
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