Why does Heroku log using the server time rather than the Rails time zone? Why does Heroku log using the server time rather than the Rails time zone? ruby-on-rails ruby-on-rails

Why does Heroku log using the server time rather than the Rails time zone?


After some further investigation into my own Heroku timezone problems, I found a post which indicates that you actually can specify the timezone at an application level, using the following command:

heroku config:add TZ=Europe/Oslo

I believe this may be the answer to all your troubles. Courtesy of http://www.reality.hk/articles/2010/01/07/1319/ (Edit: Broken link as of 2012.08.23. Archived copy.)


Without being able to change the actual server time (which I don't think you'll be able to do on Heroku), your only option is to convert the times yourself.

If Time.zone.now is too cumbersome, you could set a global timezone using the tzinfo gem:

$tz = TZInfo::Timezone.get("Europe/Oslo")$tz.now # current time in Norway

But this is still a global change in your app and not significantly different from what you're doing.


I found that the above solutions did not work on Heroku.I put this in my config/environments/production.rbMake sure you put it before your logger is initialized

Rails::Rack::Logger.class_eval do# Override logging to spit out time in different zone 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.in_time_zone('Melbourne') ] endend